esphome 2025.5.1__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 (720) 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 -5
  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/gpio.cpp +10 -1
  181. esphome/components/esp8266/preferences.cpp +6 -6
  182. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  183. esphome/components/esp_ldo/__init__.py +91 -0
  184. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  185. esphome/components/esp_ldo/esp_ldo.h +43 -0
  186. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  187. esphome/components/ethernet/ethernet_component.cpp +38 -26
  188. esphome/components/ethernet/ethernet_component.h +1 -1
  189. esphome/components/event/__init__.py +1 -0
  190. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  191. esphome/components/ezo/ezo.cpp +1 -1
  192. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  193. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  194. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  195. esphome/components/fan/__init__.py +1 -0
  196. esphome/components/fan/fan.cpp +4 -2
  197. esphome/components/fastled_base/fastled_light.cpp +7 -5
  198. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  199. esphome/components/fs3000/fs3000.cpp +1 -1
  200. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  201. esphome/components/ft63x6/ft63x6.cpp +5 -3
  202. esphome/components/gcja5/gcja5.cpp +0 -12
  203. esphome/components/gcja5/gcja5.h +8 -3
  204. esphome/components/gdk101/gdk101.cpp +2 -2
  205. esphome/components/globals/globals_component.h +13 -10
  206. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  207. esphome/components/gp8403/gp8403.cpp +4 -2
  208. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  209. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  210. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  211. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  212. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  213. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  215. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  216. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  217. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  218. esphome/components/haier/haier_base.cpp +2 -2
  219. esphome/components/haier/hon_climate.cpp +13 -6
  220. esphome/components/havells_solar/havells_solar.cpp +5 -2
  221. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  222. esphome/components/hdc1080/hdc1080.cpp +2 -2
  223. esphome/components/he60r/he60r.cpp +4 -2
  224. esphome/components/hlw8012/hlw8012.cpp +6 -4
  225. esphome/components/hm3301/hm3301.cpp +2 -2
  226. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  227. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  228. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  229. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  230. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  231. esphome/components/hte501/hte501.cpp +3 -2
  232. esphome/components/http_request/__init__.py +2 -2
  233. esphome/components/http_request/http_request.cpp +7 -5
  234. esphome/components/http_request/http_request_idf.cpp +4 -2
  235. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  236. esphome/components/htu21d/htu21d.cpp +2 -2
  237. esphome/components/htu31d/htu31d.cpp +2 -2
  238. esphome/components/hx711/hx711.cpp +2 -2
  239. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  240. esphome/components/hyt271/hyt271.cpp +2 -2
  241. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  242. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  243. esphome/components/i2s_audio/__init__.py +2 -0
  244. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  245. esphome/components/i2s_audio/i2s_audio.h +1 -1
  246. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  247. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  248. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +54 -64
  249. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -0
  250. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  251. esphome/components/iaqcore/iaqcore.cpp +3 -3
  252. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  253. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  254. esphome/components/image/image.cpp +1 -0
  255. esphome/components/ina219/ina219.cpp +2 -2
  256. esphome/components/ina226/ina226.cpp +8 -5
  257. esphome/components/ina260/ina260.cpp +1 -1
  258. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  259. esphome/components/ina3221/ina3221.cpp +2 -2
  260. esphome/components/inkplate6/display.py +12 -2
  261. esphome/components/inkplate6/inkplate.cpp +13 -9
  262. esphome/components/inkplate6/inkplate.h +7 -6
  263. esphome/components/integration/integration_sensor.cpp +1 -1
  264. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  265. esphome/components/json/json_util.cpp +4 -5
  266. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  267. esphome/components/key_collector/key_collector.cpp +4 -2
  268. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  269. esphome/components/kuntze/kuntze.cpp +4 -2
  270. esphome/components/lc709203f/__init__.py +1 -0
  271. esphome/components/lc709203f/lc709203f.cpp +299 -0
  272. esphome/components/lc709203f/lc709203f.h +55 -0
  273. esphome/components/lc709203f/sensor.py +93 -0
  274. esphome/components/lcd_base/lcd_display.cpp +2 -2
  275. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  276. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  277. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  278. esphome/components/ld2410/ld2410.cpp +6 -7
  279. esphome/components/ld2420/ld2420.cpp +9 -7
  280. esphome/components/ld2450/ld2450.cpp +6 -4
  281. esphome/components/ld2450/sensor.py +2 -2
  282. esphome/components/ledc/ledc_output.cpp +32 -28
  283. esphome/components/libretiny/const.py +1 -1
  284. esphome/components/libretiny/preferences.cpp +6 -7
  285. esphome/components/light/__init__.py +2 -1
  286. esphome/components/light/esp_hsv_color.h +1 -1
  287. esphome/components/light/light_state.cpp +9 -5
  288. esphome/components/light/light_transformer.h +1 -1
  289. esphome/components/lightwaverf/LwTx.cpp +1 -1
  290. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  291. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  292. esphome/components/lock/__init__.py +1 -0
  293. esphome/components/lock/lock.h +1 -1
  294. esphome/components/logger/__init__.py +6 -0
  295. esphome/components/logger/logger.cpp +9 -5
  296. esphome/components/logger/logger.h +4 -4
  297. esphome/components/logger/logger_esp32.cpp +5 -5
  298. esphome/components/ltr390/ltr390.cpp +8 -5
  299. esphome/components/ltr501/ltr501.cpp +19 -14
  300. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  301. esphome/components/lvgl/__init__.py +2 -2
  302. esphome/components/lvgl/automation.py +5 -4
  303. esphome/components/lvgl/defines.py +0 -2
  304. esphome/components/lvgl/lv_validation.py +1 -3
  305. esphome/components/lvgl/lvcode.py +7 -8
  306. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  307. esphome/components/lvgl/schemas.py +22 -23
  308. esphome/components/lvgl/trigger.py +8 -3
  309. esphome/components/lvgl/widgets/__init__.py +2 -2
  310. esphome/components/lvgl/widgets/canvas.py +9 -3
  311. esphome/components/lvgl/widgets/line.py +2 -1
  312. esphome/components/lvgl/widgets/tabview.py +7 -0
  313. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  314. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  315. esphome/components/max17043/max17043.cpp +2 -2
  316. esphome/components/max31855/max31855.cpp +2 -1
  317. esphome/components/max31856/max31856.cpp +9 -11
  318. esphome/components/max31865/max31865.cpp +6 -4
  319. esphome/components/max44009/max44009.cpp +2 -2
  320. esphome/components/max6675/max6675.cpp +1 -1
  321. esphome/components/max6956/max6956.cpp +5 -3
  322. esphome/components/max7219/max7219.cpp +8 -6
  323. esphome/components/max7219digit/automation.h +52 -0
  324. esphome/components/max7219digit/display.py +93 -1
  325. esphome/components/max7219digit/max7219digit.cpp +16 -13
  326. esphome/components/max9611/max9611.cpp +9 -6
  327. esphome/components/mcp23008/mcp23008.cpp +1 -1
  328. esphome/components/mcp23016/mcp23016.cpp +1 -1
  329. esphome/components/mcp23017/mcp23017.cpp +1 -1
  330. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  331. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  332. esphome/components/mcp3008/mcp3008.cpp +1 -1
  333. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  334. esphome/components/mcp3204/mcp3204.cpp +1 -1
  335. esphome/components/mcp4461/mcp4461.cpp +2 -2
  336. esphome/components/mcp4725/mcp4725.cpp +2 -2
  337. esphome/components/mcp4728/mcp4728.cpp +2 -2
  338. esphome/components/mcp9600/mcp9600.cpp +1 -1
  339. esphome/components/mcp9808/mcp9808.cpp +4 -4
  340. esphome/components/mdns/mdns_component.cpp +8 -2
  341. esphome/components/mdns/mdns_component.h +3 -1
  342. esphome/components/mdns/mdns_esp32.cpp +2 -2
  343. esphome/components/media_player/__init__.py +1 -0
  344. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  345. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  346. esphome/components/micronova/micronova.h +2 -2
  347. esphome/components/mics_4514/mics_4514.cpp +2 -2
  348. esphome/components/midea/air_conditioner.cpp +7 -5
  349. esphome/components/midea_ir/midea_ir.cpp +1 -1
  350. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  351. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  352. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  353. esphome/components/mlx90614/mlx90614.cpp +4 -3
  354. esphome/components/mmc5603/mmc5603.cpp +2 -2
  355. esphome/components/mmc5983/mmc5983.cpp +1 -1
  356. esphome/components/modbus/modbus.cpp +7 -5
  357. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  358. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  359. esphome/components/modbus_controller/switch/__init__.py +6 -2
  360. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  361. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  362. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  363. esphome/components/mpr121/mpr121.cpp +2 -2
  364. esphome/components/mpu6050/mpu6050.cpp +6 -6
  365. esphome/components/mpu6886/mpu6886.cpp +6 -6
  366. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  367. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  368. esphome/components/mqtt/mqtt_client.cpp +31 -24
  369. esphome/components/mqtt/mqtt_component.cpp +2 -2
  370. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  371. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  372. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  373. esphome/components/ms5611/ms5611.cpp +2 -2
  374. esphome/components/ms8607/ms8607.cpp +2 -2
  375. esphome/components/msa3xx/msa3xx.cpp +16 -12
  376. esphome/components/my9231/my9231.cpp +7 -5
  377. esphome/components/nau7802/nau7802.cpp +6 -4
  378. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  379. esphome/components/network/ip_address.h +1 -1
  380. esphome/components/network/util.cpp +13 -0
  381. esphome/components/nextion/base_component.py +2 -0
  382. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  383. esphome/components/nextion/display.py +34 -22
  384. esphome/components/nextion/nextion.cpp +182 -143
  385. esphome/components/nextion/nextion.h +36 -0
  386. esphome/components/nextion/nextion_commands.cpp +3 -3
  387. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  388. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  389. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  390. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  391. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  392. esphome/components/nfc/nci_message.h +1 -1
  393. esphome/components/nfc/ndef_record.h +1 -1
  394. esphome/components/nfc/ndef_record_text.h +1 -1
  395. esphome/components/nfc/ndef_record_uri.h +1 -1
  396. esphome/components/nfc/nfc.h +1 -1
  397. esphome/components/nfc/nfc_tag.h +1 -1
  398. esphome/components/noblex/noblex.cpp +1 -1
  399. esphome/components/npi19/npi19.cpp +5 -7
  400. esphome/components/number/__init__.py +11 -0
  401. esphome/components/online_image/__init__.py +13 -1
  402. esphome/components/online_image/online_image.cpp +26 -4
  403. esphome/components/online_image/online_image.h +21 -4
  404. esphome/components/opentherm/generate.py +3 -3
  405. esphome/components/opentherm/hub.cpp +11 -7
  406. esphome/components/opentherm/number/number.cpp +5 -3
  407. esphome/components/opentherm/opentherm.h +1 -1
  408. esphome/components/opentherm/schema.py +13 -13
  409. esphome/components/opentherm/validate.py +1 -1
  410. esphome/components/openthread/__init__.py +146 -0
  411. esphome/components/openthread/const.py +10 -0
  412. esphome/components/openthread/openthread.cpp +206 -0
  413. esphome/components/openthread/openthread.h +68 -0
  414. esphome/components/openthread/openthread_esp.cpp +164 -0
  415. esphome/components/openthread/tlv.py +58 -0
  416. esphome/components/openthread_info/__init__.py +0 -0
  417. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  418. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  419. esphome/components/openthread_info/text_sensor.py +105 -0
  420. esphome/components/output/float_output.cpp +1 -1
  421. esphome/components/output/switch/output_switch.cpp +1 -1
  422. esphome/components/packet_transport/packet_transport.cpp +6 -4
  423. esphome/components/pca6416a/pca6416a.cpp +2 -2
  424. esphome/components/pca9554/pca9554.cpp +6 -4
  425. esphome/components/pca9685/pca9685_output.cpp +12 -8
  426. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  427. esphome/components/pcf85063/pcf85063.cpp +2 -2
  428. esphome/components/pcf8563/pcf8563.cpp +2 -2
  429. esphome/components/pcf8574/pcf8574.cpp +2 -2
  430. esphome/components/pid/pid_climate.cpp +8 -5
  431. esphome/components/pid/pid_climate.h +1 -1
  432. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  433. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  434. esphome/components/pipsolar/pipsolar.cpp +3 -3
  435. esphome/components/pm1006/pm1006.cpp +3 -7
  436. esphome/components/pm1006/pm1006.h +4 -1
  437. esphome/components/pm2005/pm2005.cpp +12 -13
  438. esphome/components/pm2005/sensor.py +1 -1
  439. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  440. esphome/components/pmsx003/pmsx003.cpp +0 -4
  441. esphome/components/pmsx003/pmsx003.h +5 -2
  442. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  443. esphome/components/pmwcs3/pmwcs3.h +0 -1
  444. esphome/components/pn532/pn532.cpp +7 -7
  445. esphome/components/pn532/pn532.h +1 -1
  446. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  447. esphome/components/pn7150/pn7150.cpp +4 -4
  448. esphome/components/pn7160/pn7160.cpp +4 -4
  449. esphome/components/power_supply/power_supply.cpp +6 -4
  450. esphome/components/power_supply/power_supply.h +1 -1
  451. esphome/components/psram/__init__.py +59 -35
  452. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  453. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  454. esphome/components/pylontech/pylontech.cpp +2 -2
  455. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  456. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  457. esphome/components/pzemac/pzemac.cpp +4 -2
  458. esphome/components/pzemdc/pzemdc.cpp +4 -2
  459. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  460. esphome/components/qmp6988/qmp6988.cpp +2 -2
  461. esphome/components/qmp6988/qmp6988.h +1 -1
  462. esphome/components/qr_code/qr_code.cpp +5 -3
  463. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  464. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  465. esphome/components/rc522/rc522.cpp +5 -5
  466. esphome/components/rdm6300/rdm6300.cpp +1 -0
  467. esphome/components/remote_receiver/__init__.py +10 -2
  468. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  469. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  470. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  471. esphome/components/remote_transmitter/__init__.py +10 -2
  472. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  473. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  474. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  475. esphome/components/resistance/resistance_sensor.cpp +6 -3
  476. esphome/components/restart/button/restart_button.cpp +1 -1
  477. esphome/components/restart/switch/restart_switch.cpp +1 -1
  478. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  479. esphome/components/rp2040/__init__.py +7 -0
  480. esphome/components/rp2040/core.cpp +8 -1
  481. esphome/components/rp2040/gpio.cpp +26 -9
  482. esphome/components/rp2040/preferences.cpp +3 -3
  483. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  484. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  485. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  486. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  487. esphome/components/rtttl/rtttl.cpp +11 -9
  488. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  489. esphome/components/safe_mode/safe_mode.cpp +9 -8
  490. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  491. esphome/components/scd30/scd30.cpp +11 -8
  492. esphome/components/scd4x/scd4x.cpp +12 -8
  493. esphome/components/sdl/display.py +40 -0
  494. esphome/components/sdl/sdl_esphome.cpp +2 -2
  495. esphome/components/sdl/sdl_esphome.h +8 -0
  496. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  497. esphome/components/sdp3x/sdp3x.cpp +11 -11
  498. esphome/components/sds011/sds011.cpp +5 -6
  499. esphome/components/sds011/sds011.h +4 -1
  500. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  501. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  502. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  503. esphome/components/selec_meter/selec_meter.cpp +5 -2
  504. esphome/components/select/__init__.py +1 -0
  505. esphome/components/sen0321/sen0321.cpp +2 -2
  506. esphome/components/sen21231/sen21231.cpp +1 -1
  507. esphome/components/sen5x/sen5x.cpp +10 -7
  508. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  509. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  510. esphome/components/sensor/__init__.py +11 -1
  511. esphome/components/sensor/filter.h +1 -1
  512. esphome/components/sensor/sensor.h +9 -5
  513. esphome/components/servo/servo.cpp +12 -9
  514. esphome/components/servo/servo.h +1 -1
  515. esphome/components/sfa30/sfa30.cpp +1 -1
  516. esphome/components/sgp30/sgp30.cpp +10 -8
  517. esphome/components/sgp4x/sgp4x.cpp +49 -61
  518. esphome/components/sgp4x/sgp4x.h +0 -1
  519. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  520. esphome/components/sht3xd/sht3xd.cpp +1 -1
  521. esphome/components/sht4x/sht4x.cpp +2 -2
  522. esphome/components/shtcx/shtcx.cpp +13 -16
  523. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  524. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  525. esphome/components/sim800l/sim800l.cpp +2 -2
  526. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  527. esphome/components/sm16716/sm16716.cpp +1 -1
  528. esphome/components/sm2135/sm2135.cpp +1 -1
  529. esphome/components/sm2235/sm2235.cpp +5 -3
  530. esphome/components/sm2335/sm2335.cpp +5 -3
  531. esphome/components/sml/sml.cpp +1 -1
  532. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  533. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  534. esphome/components/sntp/sntp_component.cpp +1 -1
  535. esphome/components/socket/__init__.py +2 -0
  536. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  537. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  538. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  539. esphome/components/socket/socket.cpp +31 -0
  540. esphome/components/socket/socket.h +27 -1
  541. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  542. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  543. esphome/components/sound_level/sound_level.cpp +4 -2
  544. esphome/components/speaker/media_player/__init__.py +3 -0
  545. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  546. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  547. esphome/components/spi/__init__.py +10 -2
  548. esphome/components/spi/spi.cpp +4 -4
  549. esphome/components/spi_device/spi_device.cpp +1 -2
  550. esphome/components/sprinkler/sprinkler.cpp +9 -6
  551. esphome/components/sps30/sps30.cpp +16 -15
  552. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  553. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  554. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  555. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  556. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  557. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  558. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  559. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  560. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  561. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  562. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  563. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  564. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  565. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  566. esphome/components/st7567_base/st7567_base.cpp +3 -3
  567. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  568. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  569. esphome/components/st7701s/st7701s.cpp +4 -2
  570. esphome/components/st7735/st7735.cpp +3 -3
  571. esphome/components/st7789v/st7789v.cpp +10 -7
  572. esphome/components/st7920/st7920.cpp +6 -4
  573. esphome/components/statsd/statsd.cpp +9 -5
  574. esphome/components/status_led/light/status_led_light.cpp +1 -1
  575. esphome/components/status_led/status_led.cpp +1 -1
  576. esphome/components/stepper/stepper.h +5 -3
  577. esphome/components/sts3x/sts3x.cpp +2 -2
  578. esphome/components/switch/__init__.py +1 -0
  579. esphome/components/switch/switch.cpp +18 -12
  580. esphome/components/switch/switch.h +1 -1
  581. esphome/components/sx1509/__init__.py +53 -20
  582. esphome/components/sx1509/sx1509.cpp +29 -5
  583. esphome/components/sx1509/sx1509.h +9 -1
  584. esphome/components/t6615/t6615.cpp +1 -0
  585. esphome/components/tc74/tc74.cpp +1 -1
  586. esphome/components/tca9548a/tca9548a.cpp +1 -1
  587. esphome/components/tca9555/tca9555.cpp +2 -2
  588. esphome/components/tcs34725/tcs34725.cpp +4 -4
  589. esphome/components/tee501/tee501.cpp +3 -2
  590. esphome/components/tem3200/tem3200.cpp +5 -6
  591. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  592. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  593. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  594. esphome/components/template/cover/template_cover.cpp +1 -1
  595. esphome/components/template/select/template_select.cpp +6 -4
  596. esphome/components/template/text/template_text.cpp +2 -3
  597. esphome/components/template/valve/template_valve.cpp +5 -3
  598. esphome/components/text/__init__.py +10 -11
  599. esphome/components/text_sensor/__init__.py +1 -0
  600. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  601. esphome/components/time/__init__.py +1 -2
  602. esphome/components/time_based/time_based_cover.cpp +4 -2
  603. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  604. esphome/components/tm1621/tm1621.cpp +3 -3
  605. esphome/components/tm1637/tm1637.cpp +9 -7
  606. esphome/components/tm1638/tm1638.cpp +7 -5
  607. esphome/components/tm1651/tm1651.cpp +2 -2
  608. esphome/components/tmp102/tmp102.cpp +1 -3
  609. esphome/components/tmp102/tmp102.h +0 -3
  610. esphome/components/tmp1075/tmp1075.cpp +12 -9
  611. esphome/components/tmp117/tmp117.cpp +2 -2
  612. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  613. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  614. esphome/components/tsl2561/tsl2561.cpp +7 -5
  615. esphome/components/tsl2591/tsl2591.cpp +25 -27
  616. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  617. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  618. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  619. esphome/components/tuya/select/tuya_select.cpp +5 -3
  620. esphome/components/tx20/tx20.cpp +3 -3
  621. esphome/components/uart/__init__.py +4 -5
  622. esphome/components/uart/button/uart_button.cpp +1 -1
  623. esphome/components/uart/switch/uart_switch.cpp +2 -2
  624. esphome/components/uart/uart.cpp +2 -2
  625. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  626. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  627. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  628. esphome/components/uart/uart_component_host.cpp +11 -8
  629. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  630. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  631. esphome/components/udp/udp_component.cpp +9 -5
  632. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  633. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  634. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  635. esphome/components/update/__init__.py +1 -0
  636. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  637. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  638. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  639. esphome/components/usb_host/__init__.py +64 -0
  640. esphome/components/usb_host/usb_host.h +116 -0
  641. esphome/components/usb_host/usb_host_client.cpp +394 -0
  642. esphome/components/usb_host/usb_host_component.cpp +35 -0
  643. esphome/components/usb_uart/__init__.py +134 -0
  644. esphome/components/usb_uart/ch34x.cpp +80 -0
  645. esphome/components/usb_uart/cp210x.cpp +126 -0
  646. esphome/components/usb_uart/usb_uart.cpp +328 -0
  647. esphome/components/usb_uart/usb_uart.h +151 -0
  648. esphome/components/valve/__init__.py +1 -0
  649. esphome/components/veml3235/veml3235.cpp +13 -9
  650. esphome/components/veml7700/veml7700.cpp +10 -6
  651. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  652. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  653. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  654. esphome/components/web_server/server_index_v2.h +632 -630
  655. esphome/components/web_server/server_index_v3.h +411 -409
  656. esphome/components/web_server/web_server.cpp +5 -3
  657. esphome/components/web_server_base/web_server_base.cpp +1 -1
  658. esphome/components/web_server_idf/utils.cpp +1 -1
  659. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  660. esphome/components/weikai/__init__.py +2 -0
  661. esphome/components/weikai/weikai.cpp +23 -21
  662. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  663. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  664. esphome/components/wiegand/wiegand.cpp +1 -1
  665. esphome/components/wifi/wifi_component.cpp +50 -37
  666. esphome/components/wifi/wifi_component.h +7 -4
  667. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  668. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  669. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  670. esphome/components/wireguard/wireguard.cpp +21 -21
  671. esphome/components/wl_134/text_sensor.py +1 -2
  672. esphome/components/wled/wled_light_effect.cpp +1 -1
  673. esphome/components/x9c/x9c.cpp +5 -3
  674. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  675. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  676. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  677. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  678. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  679. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  680. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  681. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  682. esphome/components/xl9535/xl9535.cpp +2 -2
  683. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  684. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  685. esphome/config.py +3 -2
  686. esphome/config_validation.py +46 -17
  687. esphome/const.py +10 -1
  688. esphome/core/__init__.py +37 -18
  689. esphome/core/application.cpp +188 -5
  690. esphome/core/application.h +110 -0
  691. esphome/core/component.h +13 -0
  692. esphome/core/config.py +12 -0
  693. esphome/core/defines.h +10 -2
  694. esphome/core/hal.h +5 -0
  695. esphome/core/helpers.cpp +1 -1
  696. esphome/core/helpers.h +4 -4
  697. esphome/core/log.h +2 -0
  698. esphome/core/log_const_en.h +4 -0
  699. esphome/core/scheduler.cpp +2 -2
  700. esphome/coroutine.py +3 -4
  701. esphome/cpp_generator.py +32 -32
  702. esphome/dashboard/core.py +2 -2
  703. esphome/dashboard/web_server.py +2 -2
  704. esphome/git.py +4 -4
  705. esphome/helpers.py +5 -6
  706. esphome/loader.py +8 -7
  707. esphome/log.py +7 -1
  708. esphome/platformio_api.py +2 -3
  709. esphome/storage_json.py +13 -5
  710. esphome/types.py +12 -13
  711. esphome/util.py +1 -2
  712. esphome/writer.py +5 -3
  713. esphome/yaml_util.py +6 -1
  714. esphome/zeroconf.py +1 -1
  715. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  716. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +720 -667
  717. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  718. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  719. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  720. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,328 @@
1
+ // Should not be needed, but it's required to pass CI clang-tidy checks
2
+ #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
3
+ #include "usb_uart.h"
4
+ #include "esphome/core/log.h"
5
+ #include "esphome/components/uart/uart_debugger.h"
6
+
7
+ #include <cinttypes>
8
+
9
+ namespace esphome {
10
+ namespace usb_uart {
11
+
12
+ /**
13
+ *
14
+ * Given a configuration, look for the required interfaces defining a CDC-ACM device
15
+ * @param config_desc The configuration descriptor
16
+ * @param intf_idx The index of the interface to be examined
17
+ * @return
18
+ */
19
+ static optional<CdcEps> get_cdc(const usb_config_desc_t *config_desc, uint8_t intf_idx) {
20
+ int conf_offset, ep_offset;
21
+ const usb_ep_desc_t *notify_ep{}, *in_ep{}, *out_ep{};
22
+ uint8_t interface_number = 0;
23
+ // look for an interface with one interrupt endpoint (notify), and an interface with two bulk endpoints (data in/out)
24
+ for (;;) {
25
+ auto intf_desc = usb_parse_interface_descriptor(config_desc, intf_idx++, 0, &conf_offset);
26
+ if (!intf_desc) {
27
+ ESP_LOGE(TAG, "usb_parse_interface_descriptor failed");
28
+ return nullopt;
29
+ }
30
+ if (intf_desc->bNumEndpoints == 1) {
31
+ ep_offset = conf_offset;
32
+ notify_ep = usb_parse_endpoint_descriptor_by_index(intf_desc, 0, config_desc->wTotalLength, &ep_offset);
33
+ if (!notify_ep) {
34
+ ESP_LOGE(TAG, "notify_ep: usb_parse_endpoint_descriptor_by_index failed");
35
+ return nullopt;
36
+ }
37
+ if (notify_ep->bmAttributes != USB_BM_ATTRIBUTES_XFER_INT)
38
+ notify_ep = nullptr;
39
+ } else if (USB_CLASS_CDC_DATA && intf_desc->bNumEndpoints == 2) {
40
+ interface_number = intf_desc->bInterfaceNumber;
41
+ ep_offset = conf_offset;
42
+ out_ep = usb_parse_endpoint_descriptor_by_index(intf_desc, 0, config_desc->wTotalLength, &ep_offset);
43
+ if (!out_ep) {
44
+ ESP_LOGE(TAG, "out_ep: usb_parse_endpoint_descriptor_by_index failed");
45
+ return nullopt;
46
+ }
47
+ if (out_ep->bmAttributes != USB_BM_ATTRIBUTES_XFER_BULK)
48
+ out_ep = nullptr;
49
+ ep_offset = conf_offset;
50
+ in_ep = usb_parse_endpoint_descriptor_by_index(intf_desc, 1, config_desc->wTotalLength, &ep_offset);
51
+ if (!in_ep) {
52
+ ESP_LOGE(TAG, "in_ep: usb_parse_endpoint_descriptor_by_index failed");
53
+ return nullopt;
54
+ }
55
+ if (in_ep->bmAttributes != USB_BM_ATTRIBUTES_XFER_BULK)
56
+ in_ep = nullptr;
57
+ }
58
+ if (in_ep != nullptr && out_ep != nullptr && notify_ep != nullptr)
59
+ break;
60
+ }
61
+ if (in_ep->bEndpointAddress & usb_host::USB_DIR_IN)
62
+ return CdcEps{notify_ep, in_ep, out_ep, interface_number};
63
+ return CdcEps{notify_ep, out_ep, in_ep, interface_number};
64
+ }
65
+
66
+ std::vector<CdcEps> USBUartTypeCdcAcm::parse_descriptors_(usb_device_handle_t dev_hdl) {
67
+ const usb_config_desc_t *config_desc;
68
+ const usb_device_desc_t *device_desc;
69
+ int desc_offset = 0;
70
+ std::vector<CdcEps> cdc_devs{};
71
+
72
+ // Get required descriptors
73
+ if (usb_host_get_device_descriptor(dev_hdl, &device_desc) != ESP_OK) {
74
+ ESP_LOGE(TAG, "get_device_descriptor failed");
75
+ return {};
76
+ }
77
+ if (usb_host_get_active_config_descriptor(dev_hdl, &config_desc) != ESP_OK) {
78
+ ESP_LOGE(TAG, "get_active_config_descriptor failed");
79
+ return {};
80
+ }
81
+ if (device_desc->bDeviceClass == USB_CLASS_COMM) {
82
+ // single CDC-ACM device
83
+ if (auto eps = get_cdc(config_desc, 0)) {
84
+ ESP_LOGV(TAG, "Found CDC-ACM device");
85
+ cdc_devs.push_back(*eps);
86
+ }
87
+ return cdc_devs;
88
+ }
89
+ if (((device_desc->bDeviceClass == USB_CLASS_MISC) && (device_desc->bDeviceSubClass == USB_SUBCLASS_COMMON) &&
90
+ (device_desc->bDeviceProtocol == USB_DEVICE_PROTOCOL_IAD)) ||
91
+ ((device_desc->bDeviceClass == USB_CLASS_PER_INTERFACE) && (device_desc->bDeviceSubClass == USB_SUBCLASS_NULL) &&
92
+ (device_desc->bDeviceProtocol == USB_PROTOCOL_NULL))) {
93
+ // This is a composite device, that uses Interface Association Descriptor
94
+ const auto *this_desc = reinterpret_cast<const usb_standard_desc_t *>(config_desc);
95
+ for (;;) {
96
+ this_desc = usb_parse_next_descriptor_of_type(this_desc, config_desc->wTotalLength,
97
+ USB_B_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION, &desc_offset);
98
+ if (!this_desc)
99
+ break;
100
+ const auto *iad_desc = reinterpret_cast<const usb_iad_desc_t *>(this_desc);
101
+
102
+ if (iad_desc->bFunctionClass == USB_CLASS_COMM && iad_desc->bFunctionSubClass == USB_CDC_SUBCLASS_ACM) {
103
+ ESP_LOGV(TAG, "Found CDC-ACM device in composite device");
104
+ if (auto eps = get_cdc(config_desc, iad_desc->bFirstInterface))
105
+ cdc_devs.push_back(*eps);
106
+ }
107
+ }
108
+ }
109
+ return cdc_devs;
110
+ }
111
+
112
+ void RingBuffer::push(uint8_t item) {
113
+ this->buffer_[this->insert_pos_] = item;
114
+ this->insert_pos_ = (this->insert_pos_ + 1) % this->buffer_size_;
115
+ }
116
+ void RingBuffer::push(const uint8_t *data, size_t len) {
117
+ for (size_t i = 0; i != len; i++) {
118
+ this->buffer_[this->insert_pos_] = *data++;
119
+ this->insert_pos_ = (this->insert_pos_ + 1) % this->buffer_size_;
120
+ }
121
+ }
122
+
123
+ uint8_t RingBuffer::pop() {
124
+ uint8_t item = this->buffer_[this->read_pos_];
125
+ this->read_pos_ = (this->read_pos_ + 1) % this->buffer_size_;
126
+ return item;
127
+ }
128
+ size_t RingBuffer::pop(uint8_t *data, size_t len) {
129
+ len = std::min(len, this->get_available());
130
+ for (size_t i = 0; i != len; i++) {
131
+ *data++ = this->buffer_[this->read_pos_];
132
+ this->read_pos_ = (this->read_pos_ + 1) % this->buffer_size_;
133
+ }
134
+ return len;
135
+ }
136
+ void USBUartChannel::write_array(const uint8_t *data, size_t len) {
137
+ if (!this->initialised_) {
138
+ ESP_LOGV(TAG, "Channel not initialised - write ignored");
139
+ return;
140
+ }
141
+ while (this->output_buffer_.get_free_space() != 0 && len-- != 0) {
142
+ this->output_buffer_.push(*data++);
143
+ }
144
+ len++;
145
+ if (len > 0) {
146
+ ESP_LOGE(TAG, "Buffer full - failed to write %d bytes", len);
147
+ }
148
+ this->parent_->start_output(this);
149
+ }
150
+
151
+ bool USBUartChannel::peek_byte(uint8_t *data) {
152
+ if (this->input_buffer_.is_empty()) {
153
+ return false;
154
+ }
155
+ *data = this->input_buffer_.peek();
156
+ return true;
157
+ }
158
+ bool USBUartChannel::read_array(uint8_t *data, size_t len) {
159
+ if (!this->initialised_) {
160
+ ESP_LOGV(TAG, "Channel not initialised - read ignored");
161
+ return false;
162
+ }
163
+ auto available = this->available();
164
+ bool status = true;
165
+ if (len > available) {
166
+ ESP_LOGV(TAG, "underflow: requested %zu but returned %d, bytes", len, available);
167
+ len = available;
168
+ status = false;
169
+ }
170
+ for (size_t i = 0; i != len; i++) {
171
+ *data++ = this->input_buffer_.pop();
172
+ }
173
+ this->parent_->start_input(this);
174
+ return status;
175
+ }
176
+ void USBUartComponent::setup() { USBClient::setup(); }
177
+ void USBUartComponent::loop() { USBClient::loop(); }
178
+ void USBUartComponent::dump_config() {
179
+ USBClient::dump_config();
180
+ for (auto &channel : this->channels_) {
181
+ ESP_LOGCONFIG(TAG,
182
+ " UART Channel %d\n"
183
+ " Baud Rate: %" PRIu32 " baud\n"
184
+ " Data Bits: %u\n"
185
+ " Parity: %s\n"
186
+ " Stop bits: %s\n"
187
+ " Debug: %s\n"
188
+ " Dummy receiver: %s",
189
+ channel->index_, channel->baud_rate_, channel->data_bits_, PARITY_NAMES[channel->parity_],
190
+ STOP_BITS_NAMES[channel->stop_bits_], YESNO(channel->debug_), YESNO(channel->dummy_receiver_));
191
+ }
192
+ }
193
+ void USBUartComponent::start_input(USBUartChannel *channel) {
194
+ if (!channel->initialised_ || channel->input_started_ ||
195
+ channel->input_buffer_.get_free_space() < channel->cdc_dev_.in_ep->wMaxPacketSize)
196
+ return;
197
+ auto ep = channel->cdc_dev_.in_ep;
198
+ auto callback = [this, channel](const usb_host::TransferStatus &status) {
199
+ ESP_LOGV(TAG, "Transfer result: length: %u; status %X", status.data_len, status.error_code);
200
+ if (!status.success) {
201
+ ESP_LOGE(TAG, "Control transfer failed, status=%s", esp_err_to_name(status.error_code));
202
+ return;
203
+ }
204
+ #ifdef USE_UART_DEBUGGER
205
+ if (channel->debug_) {
206
+ uart::UARTDebug::log_hex(uart::UART_DIRECTION_RX,
207
+ std::vector<uint8_t>(status.data, status.data + status.data_len), ','); // NOLINT()
208
+ }
209
+ #endif
210
+ channel->input_started_ = false;
211
+ if (!channel->dummy_receiver_) {
212
+ for (size_t i = 0; i != status.data_len; i++) {
213
+ channel->input_buffer_.push(status.data[i]);
214
+ }
215
+ }
216
+ if (channel->input_buffer_.get_free_space() >= channel->cdc_dev_.in_ep->wMaxPacketSize) {
217
+ this->defer([this, channel] { this->start_input(channel); });
218
+ }
219
+ };
220
+ channel->input_started_ = true;
221
+ this->transfer_in(ep->bEndpointAddress, callback, ep->wMaxPacketSize);
222
+ }
223
+
224
+ void USBUartComponent::start_output(USBUartChannel *channel) {
225
+ if (channel->output_started_)
226
+ return;
227
+ if (channel->output_buffer_.is_empty()) {
228
+ return;
229
+ }
230
+ auto ep = channel->cdc_dev_.out_ep;
231
+ auto callback = [this, channel](const usb_host::TransferStatus &status) {
232
+ ESP_LOGV(TAG, "Output Transfer result: length: %u; status %X", status.data_len, status.error_code);
233
+ channel->output_started_ = false;
234
+ this->defer([this, channel] { this->start_output(channel); });
235
+ };
236
+ channel->output_started_ = true;
237
+ uint8_t data[ep->wMaxPacketSize];
238
+ auto len = channel->output_buffer_.pop(data, ep->wMaxPacketSize);
239
+ this->transfer_out(ep->bEndpointAddress, callback, data, len);
240
+ #ifdef USE_UART_DEBUGGER
241
+ if (channel->debug_) {
242
+ uart::UARTDebug::log_hex(uart::UART_DIRECTION_TX, std::vector<uint8_t>(data, data + len), ','); // NOLINT()
243
+ }
244
+ #endif
245
+ ESP_LOGV(TAG, "Output %d bytes started", len);
246
+ }
247
+
248
+ /**
249
+ * Hacky fix for some devices that report incorrect MPS values
250
+ * @param ep The endpoint descriptor
251
+ */
252
+ static void fix_mps(const usb_ep_desc_t *ep) {
253
+ if (ep != nullptr) {
254
+ auto *ep_mutable = const_cast<usb_ep_desc_t *>(ep);
255
+ if (ep->wMaxPacketSize > 64) {
256
+ ESP_LOGW(TAG, "Corrected MPS of EP %u from %u to 64", ep->bEndpointAddress, ep->wMaxPacketSize);
257
+ ep_mutable->wMaxPacketSize = 64;
258
+ }
259
+ }
260
+ }
261
+ void USBUartTypeCdcAcm::on_connected() {
262
+ auto cdc_devs = this->parse_descriptors_(this->device_handle_);
263
+ if (cdc_devs.empty()) {
264
+ this->status_set_error("No CDC-ACM device found");
265
+ this->disconnect();
266
+ return;
267
+ }
268
+ ESP_LOGD(TAG, "Found %zu CDC-ACM devices", cdc_devs.size());
269
+ auto i = 0;
270
+ for (auto channel : this->channels_) {
271
+ if (i == cdc_devs.size()) {
272
+ ESP_LOGE(TAG, "No configuration found for channel %d", channel->index_);
273
+ this->status_set_warning("No configuration found for channel");
274
+ break;
275
+ }
276
+ channel->cdc_dev_ = cdc_devs[i++];
277
+ fix_mps(channel->cdc_dev_.in_ep);
278
+ fix_mps(channel->cdc_dev_.out_ep);
279
+ channel->initialised_ = true;
280
+ auto err = usb_host_interface_claim(this->handle_, this->device_handle_, channel->cdc_dev_.interface_number, 0);
281
+ if (err != ESP_OK) {
282
+ ESP_LOGE(TAG, "usb_host_interface_claim failed: %s, channel=%d, intf=%d", esp_err_to_name(err), channel->index_,
283
+ channel->cdc_dev_.interface_number);
284
+ this->status_set_error("usb_host_interface_claim failed");
285
+ this->disconnect();
286
+ return;
287
+ }
288
+ }
289
+ this->enable_channels();
290
+ }
291
+
292
+ void USBUartTypeCdcAcm::on_disconnected() {
293
+ for (auto channel : this->channels_) {
294
+ if (channel->cdc_dev_.in_ep != nullptr) {
295
+ usb_host_endpoint_halt(this->device_handle_, channel->cdc_dev_.in_ep->bEndpointAddress);
296
+ usb_host_endpoint_flush(this->device_handle_, channel->cdc_dev_.in_ep->bEndpointAddress);
297
+ }
298
+ if (channel->cdc_dev_.out_ep != nullptr) {
299
+ usb_host_endpoint_halt(this->device_handle_, channel->cdc_dev_.out_ep->bEndpointAddress);
300
+ usb_host_endpoint_flush(this->device_handle_, channel->cdc_dev_.out_ep->bEndpointAddress);
301
+ }
302
+ if (channel->cdc_dev_.notify_ep != nullptr) {
303
+ usb_host_endpoint_halt(this->device_handle_, channel->cdc_dev_.notify_ep->bEndpointAddress);
304
+ usb_host_endpoint_flush(this->device_handle_, channel->cdc_dev_.notify_ep->bEndpointAddress);
305
+ }
306
+ usb_host_interface_release(this->handle_, this->device_handle_, channel->cdc_dev_.interface_number);
307
+ channel->initialised_ = false;
308
+ channel->input_started_ = false;
309
+ channel->output_started_ = false;
310
+ channel->input_buffer_.clear();
311
+ channel->output_buffer_.clear();
312
+ }
313
+ USBClient::on_disconnected();
314
+ }
315
+
316
+ void USBUartTypeCdcAcm::enable_channels() {
317
+ for (auto channel : this->channels_) {
318
+ if (!channel->initialised_)
319
+ continue;
320
+ channel->input_started_ = false;
321
+ channel->output_started_ = false;
322
+ this->start_input(channel);
323
+ }
324
+ }
325
+
326
+ } // namespace usb_uart
327
+ } // namespace esphome
328
+ #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3
@@ -0,0 +1,151 @@
1
+ #pragma once
2
+
3
+ #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
4
+ #include "esphome/core/component.h"
5
+ #include "esphome/core/helpers.h"
6
+ #include "esphome/components/uart/uart_component.h"
7
+ #include "esphome/components/usb_host/usb_host.h"
8
+
9
+ namespace esphome {
10
+ namespace usb_uart {
11
+ class USBUartTypeCdcAcm;
12
+ class USBUartComponent;
13
+
14
+ static const char *const TAG = "usb_uart";
15
+
16
+ static constexpr uint8_t USB_CDC_SUBCLASS_ACM = 0x02;
17
+ static constexpr uint8_t USB_SUBCLASS_COMMON = 0x02;
18
+ static constexpr uint8_t USB_SUBCLASS_NULL = 0x00;
19
+ static constexpr uint8_t USB_PROTOCOL_NULL = 0x00;
20
+ static constexpr uint8_t USB_DEVICE_PROTOCOL_IAD = 0x01;
21
+ static constexpr uint8_t USB_VENDOR_IFC = usb_host::USB_TYPE_VENDOR | usb_host::USB_RECIP_INTERFACE;
22
+ static constexpr uint8_t USB_VENDOR_DEV = usb_host::USB_TYPE_VENDOR | usb_host::USB_RECIP_DEVICE;
23
+
24
+ struct CdcEps {
25
+ const usb_ep_desc_t *notify_ep;
26
+ const usb_ep_desc_t *in_ep;
27
+ const usb_ep_desc_t *out_ep;
28
+ uint8_t interface_number;
29
+ };
30
+
31
+ enum UARTParityOptions {
32
+ UART_CONFIG_PARITY_NONE = 0,
33
+ UART_CONFIG_PARITY_ODD,
34
+ UART_CONFIG_PARITY_EVEN,
35
+ UART_CONFIG_PARITY_MARK,
36
+ UART_CONFIG_PARITY_SPACE,
37
+ };
38
+
39
+ enum UARTStopBitsOptions {
40
+ UART_CONFIG_STOP_BITS_1 = 0,
41
+ UART_CONFIG_STOP_BITS_1_5,
42
+ UART_CONFIG_STOP_BITS_2,
43
+ };
44
+
45
+ static const char *const PARITY_NAMES[] = {"NONE", "ODD", "EVEN", "MARK", "SPACE"};
46
+ static const char *const STOP_BITS_NAMES[] = {"1", "1.5", "2"};
47
+
48
+ class RingBuffer {
49
+ public:
50
+ RingBuffer(uint16_t buffer_size) : buffer_size_(buffer_size), buffer_(new uint8_t[buffer_size]) {}
51
+ bool is_empty() const { return this->read_pos_ == this->insert_pos_; }
52
+ size_t get_available() const {
53
+ return (this->insert_pos_ + this->buffer_size_ - this->read_pos_) % this->buffer_size_;
54
+ };
55
+ size_t get_free_space() const { return this->buffer_size_ - 1 - this->get_available(); }
56
+ uint8_t peek() const { return this->buffer_[this->read_pos_]; }
57
+ void push(uint8_t item);
58
+ void push(const uint8_t *data, size_t len);
59
+ uint8_t pop();
60
+ size_t pop(uint8_t *data, size_t len);
61
+ void clear() { this->read_pos_ = this->insert_pos_ = 0; }
62
+
63
+ protected:
64
+ uint16_t insert_pos_ = 0;
65
+ uint16_t read_pos_ = 0;
66
+ uint16_t buffer_size_;
67
+ uint8_t *buffer_;
68
+ };
69
+
70
+ class USBUartChannel : public uart::UARTComponent, public Parented<USBUartComponent> {
71
+ friend class USBUartComponent;
72
+ friend class USBUartTypeCdcAcm;
73
+ friend class USBUartTypeCP210X;
74
+ friend class USBUartTypeCH34X;
75
+
76
+ public:
77
+ USBUartChannel(uint8_t index, uint16_t buffer_size)
78
+ : index_(index), input_buffer_(RingBuffer(buffer_size)), output_buffer_(RingBuffer(buffer_size)) {}
79
+ void write_array(const uint8_t *data, size_t len) override;
80
+ ;
81
+ bool peek_byte(uint8_t *data) override;
82
+ ;
83
+ bool read_array(uint8_t *data, size_t len) override;
84
+ int available() override { return static_cast<int>(this->input_buffer_.get_available()); }
85
+ void flush() override {}
86
+ void check_logger_conflict() override {}
87
+ void set_parity(UARTParityOptions parity) { this->parity_ = parity; }
88
+ void set_debug(bool debug) { this->debug_ = debug; }
89
+ void set_dummy_receiver(bool dummy_receiver) { this->dummy_receiver_ = dummy_receiver; }
90
+
91
+ protected:
92
+ const uint8_t index_;
93
+ RingBuffer input_buffer_;
94
+ RingBuffer output_buffer_;
95
+ UARTParityOptions parity_{UART_CONFIG_PARITY_NONE};
96
+ bool input_started_{true};
97
+ bool output_started_{true};
98
+ CdcEps cdc_dev_{};
99
+ bool debug_{};
100
+ bool dummy_receiver_{};
101
+ bool initialised_{};
102
+ };
103
+
104
+ class USBUartComponent : public usb_host::USBClient {
105
+ public:
106
+ USBUartComponent(uint16_t vid, uint16_t pid) : usb_host::USBClient(vid, pid) {}
107
+ void setup() override;
108
+ void loop() override;
109
+ void dump_config() override;
110
+ std::vector<USBUartChannel *> get_channels() { return this->channels_; }
111
+
112
+ void add_channel(USBUartChannel *channel) { this->channels_.push_back(channel); }
113
+
114
+ void start_input(USBUartChannel *channel);
115
+ void start_output(USBUartChannel *channel);
116
+
117
+ protected:
118
+ std::vector<USBUartChannel *> channels_{};
119
+ };
120
+
121
+ class USBUartTypeCdcAcm : public USBUartComponent {
122
+ public:
123
+ USBUartTypeCdcAcm(uint16_t vid, uint16_t pid) : USBUartComponent(vid, pid) {}
124
+
125
+ protected:
126
+ virtual std::vector<CdcEps> parse_descriptors_(usb_device_handle_t dev_hdl);
127
+ void on_connected() override;
128
+ virtual void enable_channels();
129
+ void on_disconnected() override;
130
+ };
131
+
132
+ class USBUartTypeCP210X : public USBUartTypeCdcAcm {
133
+ public:
134
+ USBUartTypeCP210X(uint16_t vid, uint16_t pid) : USBUartTypeCdcAcm(vid, pid) {}
135
+
136
+ protected:
137
+ std::vector<CdcEps> parse_descriptors_(usb_device_handle_t dev_hdl) override;
138
+ void enable_channels() override;
139
+ };
140
+ class USBUartTypeCH34X : public USBUartTypeCdcAcm {
141
+ public:
142
+ USBUartTypeCH34X(uint16_t vid, uint16_t pid) : USBUartTypeCdcAcm(vid, pid) {}
143
+
144
+ protected:
145
+ void enable_channels() override;
146
+ };
147
+
148
+ } // namespace usb_uart
149
+ } // namespace esphome
150
+
151
+ #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3
@@ -163,6 +163,7 @@ async def register_valve(var, config):
163
163
  if not CORE.has_id(config[CONF_ID]):
164
164
  var = cg.Pvariable(config[CONF_ID], var)
165
165
  cg.add(cg.App.register_valve(var))
166
+ CORE.register_platform_component("valve", var)
166
167
  await _setup_valve_core(var, config)
167
168
 
168
169
 
@@ -10,7 +10,7 @@ static const char *const TAG = "veml3235.sensor";
10
10
  void VEML3235Sensor::setup() {
11
11
  uint8_t device_id[] = {0, 0};
12
12
 
13
- ESP_LOGCONFIG(TAG, "Setting up VEML3235 '%s'...", this->name_.c_str());
13
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
14
14
 
15
15
  if (!this->refresh_config_reg()) {
16
16
  ESP_LOGE(TAG, "Unable to write configuration");
@@ -212,18 +212,22 @@ void VEML3235Sensor::dump_config() {
212
212
  LOG_SENSOR("", "VEML3235", this);
213
213
  LOG_I2C_DEVICE(this);
214
214
  if (this->is_failed()) {
215
- ESP_LOGE(TAG, "Communication failed");
215
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
216
216
  }
217
217
  LOG_UPDATE_INTERVAL(this);
218
218
  ESP_LOGCONFIG(TAG, " Auto-gain enabled: %s", YESNO(this->auto_gain_));
219
219
  if (this->auto_gain_) {
220
- ESP_LOGCONFIG(TAG, " Auto-gain upper threshold: %f%%", this->auto_gain_threshold_high_ * 100.0);
221
- ESP_LOGCONFIG(TAG, " Auto-gain lower threshold: %f%%", this->auto_gain_threshold_low_ * 100.0);
222
- ESP_LOGCONFIG(TAG, " Values below will be used as initial values only");
223
- }
224
- ESP_LOGCONFIG(TAG, " Digital gain: %uX", digital_gain);
225
- ESP_LOGCONFIG(TAG, " Gain: %uX", gain);
226
- ESP_LOGCONFIG(TAG, " Integration time: %ums", integration_time);
220
+ ESP_LOGCONFIG(TAG,
221
+ " Auto-gain upper threshold: %f%%\n"
222
+ " Auto-gain lower threshold: %f%%\n"
223
+ " Values below will be used as initial values only",
224
+ this->auto_gain_threshold_high_ * 100.0, this->auto_gain_threshold_low_ * 100.0);
225
+ }
226
+ ESP_LOGCONFIG(TAG,
227
+ " Digital gain: %uX\n"
228
+ " Gain: %uX\n"
229
+ " Integration time: %ums",
230
+ digital_gain, gain, integration_time);
227
231
  }
228
232
 
229
233
  } // namespace veml3235
@@ -78,7 +78,7 @@ static const char *get_gain_str(Gain gain) {
78
78
  }
79
79
 
80
80
  void VEML7700Component::setup() {
81
- ESP_LOGCONFIG(TAG, "Setting up VEML7700/6030...");
81
+ ESP_LOGCONFIG(TAG, "Running setup");
82
82
 
83
83
  auto err = this->configure_();
84
84
  if (err != i2c::ERROR_OK) {
@@ -93,11 +93,15 @@ void VEML7700Component::dump_config() {
93
93
  LOG_I2C_DEVICE(this);
94
94
  ESP_LOGCONFIG(TAG, " Automatic gain/time: %s", YESNO(this->automatic_mode_enabled_));
95
95
  if (!this->automatic_mode_enabled_) {
96
- ESP_LOGCONFIG(TAG, " Gain: %s", get_gain_str(this->gain_));
97
- ESP_LOGCONFIG(TAG, " Integration time: %d ms", get_itime_ms(this->integration_time_));
96
+ ESP_LOGCONFIG(TAG,
97
+ " Gain: %s\n"
98
+ " Integration time: %d ms",
99
+ get_gain_str(this->gain_), get_itime_ms(this->integration_time_));
98
100
  }
99
- ESP_LOGCONFIG(TAG, " Lux compensation: %s", YESNO(this->lux_compensation_enabled_));
100
- ESP_LOGCONFIG(TAG, " Glass attenuation factor: %f", this->glass_attenuation_factor_);
101
+ ESP_LOGCONFIG(TAG,
102
+ " Lux compensation: %s\n"
103
+ " Glass attenuation factor: %f",
104
+ YESNO(this->lux_compensation_enabled_), this->glass_attenuation_factor_);
101
105
  LOG_UPDATE_INTERVAL(this);
102
106
 
103
107
  LOG_SENSOR(" ", "ALS channel lux", this->ambient_light_sensor_);
@@ -109,7 +113,7 @@ void VEML7700Component::dump_config() {
109
113
  LOG_SENSOR(" ", "Actual integration time", this->actual_integration_time_sensor_);
110
114
 
111
115
  if (this->is_failed()) {
112
- ESP_LOGE(TAG, "Communication with I2C VEML7700/6030 failed!");
116
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
113
117
  }
114
118
  }
115
119
 
@@ -204,7 +204,7 @@ void VoiceAssistant::loop() {
204
204
  break;
205
205
  }
206
206
  case State::START_PIPELINE: {
207
- ESP_LOGD(TAG, "Requesting start...");
207
+ ESP_LOGD(TAG, "Requesting start");
208
208
  uint32_t flags = 0;
209
209
  if (!this->continue_conversation_ && this->use_wake_word_)
210
210
  flags |= api::enums::VOICE_ASSISTANT_REQUEST_USE_WAKE_WORD;
@@ -223,7 +223,7 @@ void VoiceAssistant::loop() {
223
223
  msg.wake_word_phrase = this->wake_word_;
224
224
  this->wake_word_ = "";
225
225
 
226
- if (this->api_client_ == nullptr || !this->api_client_->send_voice_assistant_request(msg)) {
226
+ if (this->api_client_ == nullptr || !this->api_client_->send_message(msg)) {
227
227
  ESP_LOGW(TAG, "Could not request start");
228
228
  this->error_trigger_->trigger("not-connected", "Could not request start");
229
229
  this->continuous_ = false;
@@ -245,7 +245,7 @@ void VoiceAssistant::loop() {
245
245
  if (this->audio_mode_ == AUDIO_MODE_API) {
246
246
  api::VoiceAssistantAudio msg;
247
247
  msg.data.assign((char *) this->send_buffer_, read_bytes);
248
- this->api_client_->send_voice_assistant_audio(msg);
248
+ this->api_client_->send_message(msg);
249
249
  } else {
250
250
  if (!this->udp_socket_running_) {
251
251
  if (!this->start_udp_socket_()) {
@@ -331,7 +331,7 @@ void VoiceAssistant::loop() {
331
331
 
332
332
  api::VoiceAssistantAnnounceFinished msg;
333
333
  msg.success = true;
334
- this->api_client_->send_voice_assistant_announce_finished(msg);
334
+ this->api_client_->send_message(msg);
335
335
  break;
336
336
  }
337
337
  }
@@ -577,10 +577,10 @@ void VoiceAssistant::signal_stop_() {
577
577
  if (this->api_client_ == nullptr) {
578
578
  return;
579
579
  }
580
- ESP_LOGD(TAG, "Signaling stop...");
580
+ ESP_LOGD(TAG, "Signaling stop");
581
581
  api::VoiceAssistantRequest msg;
582
582
  msg.start = false;
583
- this->api_client_->send_voice_assistant_request(msg);
583
+ this->api_client_->send_message(msg);
584
584
  }
585
585
 
586
586
  void VoiceAssistant::start_playback_timeout_() {
@@ -590,7 +590,7 @@ void VoiceAssistant::start_playback_timeout_() {
590
590
 
591
591
  api::VoiceAssistantAnnounceFinished msg;
592
592
  msg.success = true;
593
- this->api_client_->send_voice_assistant_announce_finished(msg);
593
+ this->api_client_->send_message(msg);
594
594
  });
595
595
  }
596
596
 
@@ -30,7 +30,7 @@ void WakeOnLanButton::press_action() {
30
30
  ESP_LOGW(TAG, "Network not connected");
31
31
  return;
32
32
  }
33
- ESP_LOGI(TAG, "Sending Wake-on-LAN Packet...");
33
+ ESP_LOGI(TAG, "Sending Wake-on-LAN Packet");
34
34
  #if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
35
35
  struct sockaddr_storage saddr {};
36
36
  auto addr_len =
@@ -1,7 +1,7 @@
1
1
  #include "waveshare_epaper.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/application.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
  #include <cinttypes>
6
6
  #include <bitset>
7
7