esphome 2025.5.2__py3-none-any.whl → 2025.6.0b2__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 (746) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +3 -0
  33. esphome/components/api/api_pb2.h +702 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +13 -10
  258. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  259. esphome/components/iaqcore/iaqcore.cpp +3 -3
  260. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  261. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  262. esphome/components/image/image.cpp +1 -0
  263. esphome/components/ina219/ina219.cpp +2 -2
  264. esphome/components/ina226/ina226.cpp +8 -5
  265. esphome/components/ina260/ina260.cpp +1 -1
  266. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  267. esphome/components/ina3221/ina3221.cpp +2 -2
  268. esphome/components/inkplate6/display.py +12 -2
  269. esphome/components/inkplate6/inkplate.cpp +13 -9
  270. esphome/components/inkplate6/inkplate.h +7 -6
  271. esphome/components/integration/integration_sensor.cpp +1 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  273. esphome/components/json/json_util.cpp +4 -5
  274. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  275. esphome/components/key_collector/key_collector.cpp +4 -2
  276. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  277. esphome/components/kuntze/kuntze.cpp +4 -2
  278. esphome/components/lc709203f/__init__.py +1 -0
  279. esphome/components/lc709203f/lc709203f.cpp +299 -0
  280. esphome/components/lc709203f/lc709203f.h +55 -0
  281. esphome/components/lc709203f/sensor.py +93 -0
  282. esphome/components/lcd_base/lcd_display.cpp +2 -2
  283. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  284. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  285. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  286. esphome/components/ld2410/ld2410.cpp +6 -7
  287. esphome/components/ld2420/ld2420.cpp +9 -7
  288. esphome/components/ld2450/ld2450.cpp +6 -4
  289. esphome/components/ld2450/sensor.py +2 -2
  290. esphome/components/ledc/ledc_output.cpp +32 -28
  291. esphome/components/libretiny/const.py +1 -1
  292. esphome/components/libretiny/preferences.cpp +6 -7
  293. esphome/components/light/__init__.py +2 -1
  294. esphome/components/light/esp_hsv_color.h +1 -1
  295. esphome/components/light/light_state.cpp +9 -5
  296. esphome/components/light/light_transformer.h +1 -1
  297. esphome/components/lightwaverf/LwTx.cpp +1 -1
  298. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  299. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  300. esphome/components/lock/__init__.py +1 -0
  301. esphome/components/lock/lock.h +1 -1
  302. esphome/components/logger/__init__.py +6 -0
  303. esphome/components/logger/logger.cpp +11 -20
  304. esphome/components/logger/logger.h +1 -2
  305. esphome/components/logger/logger_esp32.cpp +5 -5
  306. esphome/components/ltr390/ltr390.cpp +8 -5
  307. esphome/components/ltr501/ltr501.cpp +19 -14
  308. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  309. esphome/components/lvgl/__init__.py +2 -2
  310. esphome/components/lvgl/automation.py +5 -4
  311. esphome/components/lvgl/defines.py +0 -2
  312. esphome/components/lvgl/lv_validation.py +1 -3
  313. esphome/components/lvgl/lvcode.py +7 -8
  314. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  315. esphome/components/lvgl/schemas.py +22 -23
  316. esphome/components/lvgl/trigger.py +8 -3
  317. esphome/components/lvgl/widgets/__init__.py +2 -2
  318. esphome/components/lvgl/widgets/canvas.py +9 -3
  319. esphome/components/lvgl/widgets/line.py +2 -1
  320. esphome/components/lvgl/widgets/tabview.py +7 -0
  321. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  322. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  323. esphome/components/max17043/max17043.cpp +2 -2
  324. esphome/components/max31855/max31855.cpp +2 -1
  325. esphome/components/max31856/max31856.cpp +9 -11
  326. esphome/components/max31865/max31865.cpp +6 -4
  327. esphome/components/max44009/max44009.cpp +2 -2
  328. esphome/components/max6675/max6675.cpp +1 -1
  329. esphome/components/max6956/max6956.cpp +5 -3
  330. esphome/components/max7219/max7219.cpp +8 -6
  331. esphome/components/max7219digit/automation.h +52 -0
  332. esphome/components/max7219digit/display.py +93 -1
  333. esphome/components/max7219digit/max7219digit.cpp +16 -13
  334. esphome/components/max9611/max9611.cpp +9 -6
  335. esphome/components/mcp23008/mcp23008.cpp +1 -1
  336. esphome/components/mcp23016/mcp23016.cpp +1 -1
  337. esphome/components/mcp23017/mcp23017.cpp +1 -1
  338. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  339. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  340. esphome/components/mcp3008/mcp3008.cpp +1 -1
  341. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  342. esphome/components/mcp3204/mcp3204.cpp +1 -1
  343. esphome/components/mcp4461/mcp4461.cpp +2 -2
  344. esphome/components/mcp4725/mcp4725.cpp +2 -2
  345. esphome/components/mcp4728/mcp4728.cpp +2 -2
  346. esphome/components/mcp9600/mcp9600.cpp +1 -1
  347. esphome/components/mcp9808/mcp9808.cpp +4 -4
  348. esphome/components/mdns/mdns_component.cpp +8 -2
  349. esphome/components/mdns/mdns_component.h +3 -1
  350. esphome/components/mdns/mdns_esp32.cpp +2 -2
  351. esphome/components/media_player/__init__.py +1 -0
  352. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  353. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  354. esphome/components/micronova/micronova.h +2 -2
  355. esphome/components/mics_4514/mics_4514.cpp +2 -2
  356. esphome/components/midea/air_conditioner.cpp +7 -5
  357. esphome/components/midea_ir/midea_ir.cpp +1 -1
  358. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  359. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  360. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  361. esphome/components/mlx90614/mlx90614.cpp +4 -3
  362. esphome/components/mmc5603/mmc5603.cpp +2 -2
  363. esphome/components/mmc5983/mmc5983.cpp +1 -1
  364. esphome/components/modbus/modbus.cpp +7 -5
  365. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  366. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  367. esphome/components/modbus_controller/switch/__init__.py +6 -2
  368. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  369. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  370. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  371. esphome/components/mpr121/mpr121.cpp +2 -2
  372. esphome/components/mpu6050/mpu6050.cpp +6 -6
  373. esphome/components/mpu6886/mpu6886.cpp +6 -6
  374. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  375. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  376. esphome/components/mqtt/mqtt_client.cpp +31 -24
  377. esphome/components/mqtt/mqtt_component.cpp +3 -3
  378. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  379. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  380. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  381. esphome/components/ms5611/ms5611.cpp +2 -2
  382. esphome/components/ms8607/ms8607.cpp +2 -2
  383. esphome/components/msa3xx/msa3xx.cpp +16 -12
  384. esphome/components/my9231/my9231.cpp +7 -5
  385. esphome/components/nau7802/nau7802.cpp +6 -4
  386. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  387. esphome/components/network/ip_address.h +1 -1
  388. esphome/components/network/util.cpp +13 -0
  389. esphome/components/nextion/base_component.py +2 -0
  390. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  391. esphome/components/nextion/display.py +34 -22
  392. esphome/components/nextion/nextion.cpp +182 -143
  393. esphome/components/nextion/nextion.h +36 -0
  394. esphome/components/nextion/nextion_commands.cpp +3 -3
  395. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  396. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  397. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  398. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  399. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  400. esphome/components/nfc/nci_message.h +1 -1
  401. esphome/components/nfc/ndef_record.h +1 -1
  402. esphome/components/nfc/ndef_record_text.h +1 -1
  403. esphome/components/nfc/ndef_record_uri.h +1 -1
  404. esphome/components/nfc/nfc.h +1 -1
  405. esphome/components/nfc/nfc_tag.h +1 -1
  406. esphome/components/noblex/noblex.cpp +1 -1
  407. esphome/components/npi19/npi19.cpp +5 -7
  408. esphome/components/number/__init__.py +11 -0
  409. esphome/components/number/number.cpp +1 -1
  410. esphome/components/number/number.h +0 -4
  411. esphome/components/online_image/__init__.py +13 -1
  412. esphome/components/online_image/online_image.cpp +26 -4
  413. esphome/components/online_image/online_image.h +21 -4
  414. esphome/components/opentherm/generate.py +3 -3
  415. esphome/components/opentherm/hub.cpp +11 -7
  416. esphome/components/opentherm/number/number.cpp +5 -3
  417. esphome/components/opentherm/opentherm.h +1 -1
  418. esphome/components/opentherm/schema.py +13 -13
  419. esphome/components/opentherm/validate.py +1 -1
  420. esphome/components/openthread/__init__.py +146 -0
  421. esphome/components/openthread/const.py +10 -0
  422. esphome/components/openthread/openthread.cpp +206 -0
  423. esphome/components/openthread/openthread.h +68 -0
  424. esphome/components/openthread/openthread_esp.cpp +164 -0
  425. esphome/components/openthread/tlv.py +58 -0
  426. esphome/components/openthread_info/__init__.py +0 -0
  427. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  428. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  429. esphome/components/openthread_info/text_sensor.py +105 -0
  430. esphome/components/output/float_output.cpp +1 -1
  431. esphome/components/output/switch/output_switch.cpp +1 -1
  432. esphome/components/packet_transport/packet_transport.cpp +6 -4
  433. esphome/components/pca6416a/pca6416a.cpp +2 -2
  434. esphome/components/pca9554/pca9554.cpp +6 -4
  435. esphome/components/pca9685/pca9685_output.cpp +12 -8
  436. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  437. esphome/components/pcf85063/pcf85063.cpp +2 -2
  438. esphome/components/pcf8563/pcf8563.cpp +2 -2
  439. esphome/components/pcf8574/pcf8574.cpp +2 -2
  440. esphome/components/pid/pid_climate.cpp +8 -5
  441. esphome/components/pid/pid_climate.h +1 -1
  442. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  443. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  444. esphome/components/pipsolar/pipsolar.cpp +3 -3
  445. esphome/components/pm1006/pm1006.cpp +3 -7
  446. esphome/components/pm1006/pm1006.h +4 -1
  447. esphome/components/pm2005/pm2005.cpp +12 -13
  448. esphome/components/pm2005/sensor.py +1 -1
  449. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  450. esphome/components/pmsx003/pmsx003.cpp +0 -4
  451. esphome/components/pmsx003/pmsx003.h +5 -2
  452. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  453. esphome/components/pmwcs3/pmwcs3.h +0 -1
  454. esphome/components/pn532/pn532.cpp +7 -7
  455. esphome/components/pn532/pn532.h +1 -1
  456. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  457. esphome/components/pn7150/pn7150.cpp +4 -4
  458. esphome/components/pn7160/pn7160.cpp +4 -4
  459. esphome/components/power_supply/power_supply.cpp +6 -4
  460. esphome/components/power_supply/power_supply.h +1 -1
  461. esphome/components/prometheus/__init__.py +0 -1
  462. esphome/components/psram/__init__.py +59 -35
  463. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  464. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  465. esphome/components/pylontech/pylontech.cpp +2 -2
  466. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  467. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  468. esphome/components/pzemac/pzemac.cpp +4 -2
  469. esphome/components/pzemdc/pzemdc.cpp +4 -2
  470. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  471. esphome/components/qmp6988/qmp6988.cpp +2 -2
  472. esphome/components/qmp6988/qmp6988.h +1 -1
  473. esphome/components/qr_code/qr_code.cpp +5 -3
  474. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  475. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  476. esphome/components/rc522/rc522.cpp +5 -5
  477. esphome/components/rdm6300/rdm6300.cpp +1 -0
  478. esphome/components/remote_receiver/__init__.py +10 -2
  479. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  480. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  481. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  482. esphome/components/remote_transmitter/__init__.py +10 -2
  483. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  484. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  485. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  486. esphome/components/resistance/resistance_sensor.cpp +6 -3
  487. esphome/components/restart/button/restart_button.cpp +1 -1
  488. esphome/components/restart/switch/restart_switch.cpp +1 -1
  489. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  490. esphome/components/rp2040/__init__.py +7 -0
  491. esphome/components/rp2040/core.cpp +8 -1
  492. esphome/components/rp2040/preferences.cpp +3 -3
  493. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  494. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  495. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  496. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  497. esphome/components/rtttl/rtttl.cpp +11 -9
  498. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  499. esphome/components/safe_mode/safe_mode.cpp +9 -8
  500. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  501. esphome/components/scd30/scd30.cpp +11 -8
  502. esphome/components/scd4x/scd4x.cpp +12 -8
  503. esphome/components/sdl/display.py +40 -0
  504. esphome/components/sdl/sdl_esphome.cpp +2 -2
  505. esphome/components/sdl/sdl_esphome.h +8 -0
  506. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  507. esphome/components/sdp3x/sdp3x.cpp +11 -11
  508. esphome/components/sds011/sds011.cpp +5 -6
  509. esphome/components/sds011/sds011.h +4 -1
  510. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  511. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  512. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  513. esphome/components/selec_meter/selec_meter.cpp +5 -2
  514. esphome/components/select/__init__.py +1 -0
  515. esphome/components/select/select.cpp +1 -1
  516. esphome/components/select/select.h +0 -4
  517. esphome/components/sen0321/sen0321.cpp +2 -2
  518. esphome/components/sen21231/sen21231.cpp +1 -1
  519. esphome/components/sen5x/sen5x.cpp +10 -7
  520. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  521. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  522. esphome/components/sensor/__init__.py +11 -1
  523. esphome/components/sensor/filter.h +1 -1
  524. esphome/components/sensor/sensor.cpp +8 -4
  525. esphome/components/sensor/sensor.h +12 -11
  526. esphome/components/servo/servo.cpp +12 -9
  527. esphome/components/servo/servo.h +1 -1
  528. esphome/components/sfa30/sfa30.cpp +1 -1
  529. esphome/components/sgp30/sgp30.cpp +10 -8
  530. esphome/components/sgp4x/sgp4x.cpp +49 -61
  531. esphome/components/sgp4x/sgp4x.h +0 -1
  532. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  533. esphome/components/sht3xd/sht3xd.cpp +1 -1
  534. esphome/components/sht4x/sht4x.cpp +2 -2
  535. esphome/components/shtcx/shtcx.cpp +13 -16
  536. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  537. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  538. esphome/components/sim800l/sim800l.cpp +2 -2
  539. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  540. esphome/components/sm16716/sm16716.cpp +1 -1
  541. esphome/components/sm2135/sm2135.cpp +1 -1
  542. esphome/components/sm2235/sm2235.cpp +5 -3
  543. esphome/components/sm2335/sm2335.cpp +5 -3
  544. esphome/components/sml/sml.cpp +1 -1
  545. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  546. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  547. esphome/components/sntp/sntp_component.cpp +1 -1
  548. esphome/components/socket/__init__.py +2 -0
  549. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  550. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  551. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  552. esphome/components/socket/socket.cpp +31 -0
  553. esphome/components/socket/socket.h +27 -1
  554. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  555. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  556. esphome/components/sound_level/sound_level.cpp +4 -2
  557. esphome/components/speaker/media_player/__init__.py +3 -0
  558. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  559. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  560. esphome/components/spi/__init__.py +10 -2
  561. esphome/components/spi/spi.cpp +4 -4
  562. esphome/components/spi_device/spi_device.cpp +1 -2
  563. esphome/components/sprinkler/sprinkler.cpp +9 -6
  564. esphome/components/sps30/sps30.cpp +16 -15
  565. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  566. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  567. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  568. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  569. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  570. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  571. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  572. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  573. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  574. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  575. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  576. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  577. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  578. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  579. esphome/components/st7567_base/st7567_base.cpp +3 -3
  580. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  581. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  582. esphome/components/st7701s/st7701s.cpp +4 -2
  583. esphome/components/st7735/st7735.cpp +3 -3
  584. esphome/components/st7789v/st7789v.cpp +10 -7
  585. esphome/components/st7920/st7920.cpp +6 -4
  586. esphome/components/statsd/statsd.cpp +9 -5
  587. esphome/components/status_led/light/status_led_light.cpp +3 -3
  588. esphome/components/status_led/light/status_led_light.h +1 -1
  589. esphome/components/status_led/status_led.cpp +1 -1
  590. esphome/components/stepper/stepper.h +5 -3
  591. esphome/components/sts3x/sts3x.cpp +2 -2
  592. esphome/components/switch/__init__.py +1 -0
  593. esphome/components/switch/switch.cpp +18 -12
  594. esphome/components/switch/switch.h +1 -1
  595. esphome/components/sx1509/__init__.py +53 -20
  596. esphome/components/sx1509/sx1509.cpp +29 -5
  597. esphome/components/sx1509/sx1509.h +9 -1
  598. esphome/components/t6615/t6615.cpp +1 -0
  599. esphome/components/tc74/tc74.cpp +1 -1
  600. esphome/components/tca9548a/tca9548a.cpp +1 -1
  601. esphome/components/tca9555/tca9555.cpp +2 -2
  602. esphome/components/tcs34725/tcs34725.cpp +4 -4
  603. esphome/components/tee501/tee501.cpp +3 -2
  604. esphome/components/tem3200/tem3200.cpp +5 -6
  605. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  606. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  607. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  608. esphome/components/template/cover/template_cover.cpp +1 -1
  609. esphome/components/template/select/template_select.cpp +6 -4
  610. esphome/components/template/text/template_text.cpp +2 -3
  611. esphome/components/template/valve/template_valve.cpp +5 -3
  612. esphome/components/text/__init__.py +10 -11
  613. esphome/components/text/text.cpp +1 -1
  614. esphome/components/text/text.h +0 -4
  615. esphome/components/text_sensor/__init__.py +1 -0
  616. esphome/components/text_sensor/text_sensor.cpp +8 -4
  617. esphome/components/text_sensor/text_sensor.h +6 -6
  618. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  619. esphome/components/time/__init__.py +1 -2
  620. esphome/components/time_based/time_based_cover.cpp +4 -2
  621. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  622. esphome/components/tm1621/tm1621.cpp +3 -3
  623. esphome/components/tm1637/tm1637.cpp +9 -7
  624. esphome/components/tm1638/tm1638.cpp +7 -5
  625. esphome/components/tm1651/tm1651.cpp +2 -2
  626. esphome/components/tmp102/tmp102.cpp +1 -3
  627. esphome/components/tmp102/tmp102.h +0 -3
  628. esphome/components/tmp1075/tmp1075.cpp +12 -9
  629. esphome/components/tmp117/tmp117.cpp +2 -2
  630. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  631. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  632. esphome/components/tsl2561/tsl2561.cpp +7 -5
  633. esphome/components/tsl2591/tsl2591.cpp +25 -27
  634. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  635. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  636. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  637. esphome/components/tuya/select/tuya_select.cpp +5 -3
  638. esphome/components/tx20/tx20.cpp +3 -3
  639. esphome/components/uart/__init__.py +4 -5
  640. esphome/components/uart/button/uart_button.cpp +1 -1
  641. esphome/components/uart/switch/uart_switch.cpp +2 -2
  642. esphome/components/uart/uart.cpp +2 -2
  643. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  644. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  645. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  646. esphome/components/uart/uart_component_host.cpp +11 -8
  647. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  648. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  649. esphome/components/udp/udp_component.cpp +9 -5
  650. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  651. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  652. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  653. esphome/components/update/__init__.py +1 -0
  654. esphome/components/update/update_entity.cpp +1 -1
  655. esphome/components/update/update_entity.h +0 -3
  656. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  657. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  658. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  659. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  660. esphome/components/usb_host/__init__.py +64 -0
  661. esphome/components/usb_host/usb_host.h +116 -0
  662. esphome/components/usb_host/usb_host_client.cpp +394 -0
  663. esphome/components/usb_host/usb_host_component.cpp +35 -0
  664. esphome/components/usb_uart/__init__.py +134 -0
  665. esphome/components/usb_uart/ch34x.cpp +80 -0
  666. esphome/components/usb_uart/cp210x.cpp +126 -0
  667. esphome/components/usb_uart/usb_uart.cpp +328 -0
  668. esphome/components/usb_uart/usb_uart.h +151 -0
  669. esphome/components/valve/__init__.py +1 -0
  670. esphome/components/veml3235/veml3235.cpp +13 -9
  671. esphome/components/veml7700/veml7700.cpp +10 -6
  672. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  673. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  674. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  675. esphome/components/web_server/server_index_v2.h +632 -630
  676. esphome/components/web_server/server_index_v3.h +411 -409
  677. esphome/components/web_server/web_server.cpp +5 -3
  678. esphome/components/web_server_base/web_server_base.cpp +1 -1
  679. esphome/components/web_server_idf/__init__.py +0 -2
  680. esphome/components/web_server_idf/utils.cpp +1 -1
  681. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  682. esphome/components/web_server_idf/web_server_idf.h +7 -0
  683. esphome/components/weikai/__init__.py +2 -0
  684. esphome/components/weikai/weikai.cpp +24 -22
  685. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  686. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  687. esphome/components/wiegand/wiegand.cpp +1 -1
  688. esphome/components/wifi/wifi_component.cpp +50 -37
  689. esphome/components/wifi/wifi_component.h +7 -4
  690. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  691. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  692. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  693. esphome/components/wireguard/wireguard.cpp +21 -21
  694. esphome/components/wl_134/text_sensor.py +1 -2
  695. esphome/components/wled/wled_light_effect.cpp +1 -1
  696. esphome/components/x9c/x9c.cpp +5 -3
  697. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  698. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  699. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  700. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  701. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  702. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  703. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  704. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  705. esphome/components/xl9535/xl9535.cpp +2 -2
  706. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  707. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  708. esphome/config.py +3 -2
  709. esphome/config_validation.py +46 -17
  710. esphome/const.py +10 -1
  711. esphome/core/__init__.py +37 -18
  712. esphome/core/application.cpp +197 -8
  713. esphome/core/application.h +116 -6
  714. esphome/core/component.cpp +36 -15
  715. esphome/core/component.h +43 -13
  716. esphome/core/config.py +12 -0
  717. esphome/core/defines.h +10 -2
  718. esphome/core/entity_base.cpp +4 -16
  719. esphome/core/entity_base.h +27 -13
  720. esphome/core/helpers.cpp +1 -1
  721. esphome/core/helpers.h +5 -5
  722. esphome/core/log.h +2 -0
  723. esphome/core/log_const_en.h +4 -0
  724. esphome/core/scheduler.cpp +2 -2
  725. esphome/coroutine.py +3 -4
  726. esphome/cpp_generator.py +32 -32
  727. esphome/dashboard/core.py +2 -2
  728. esphome/dashboard/web_server.py +2 -2
  729. esphome/git.py +4 -4
  730. esphome/helpers.py +5 -6
  731. esphome/loader.py +8 -7
  732. esphome/log.py +7 -1
  733. esphome/platformio_api.py +2 -3
  734. esphome/storage_json.py +13 -5
  735. esphome/types.py +12 -13
  736. esphome/util.py +1 -2
  737. esphome/wizard.py +0 -16
  738. esphome/writer.py +5 -3
  739. esphome/yaml_util.py +6 -1
  740. esphome/zeroconf.py +1 -1
  741. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/METADATA +12 -11
  742. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/RECORD +746 -692
  743. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/WHEEL +1 -1
  744. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/entry_points.txt +0 -0
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/licenses/LICENSE +0 -0
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,289 @@
1
+ #include "es8388.h"
2
+
3
+ #include <cinttypes>
4
+ #include "esphome/core/hal.h"
5
+ #include "esphome/core/log.h"
6
+
7
+ namespace esphome {
8
+ namespace es8388 {
9
+
10
+ static const char *const TAG = "es8388";
11
+
12
+ // Mark the component as failed; use only in setup
13
+ #define ES8388_ERROR_FAILED(func) \
14
+ if (!(func)) { \
15
+ this->mark_failed(); \
16
+ return; \
17
+ }
18
+
19
+ // Return false; use outside of setup
20
+ #define ES8388_ERROR_CHECK(func) \
21
+ if (!(func)) { \
22
+ return false; \
23
+ }
24
+
25
+ void ES8388::setup() {
26
+ ESP_LOGCONFIG(TAG, "Running setup");
27
+
28
+ // mute DAC
29
+ this->set_mute_state_(true);
30
+
31
+ // I2S worker mode
32
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_MASTERMODE, 0x00));
33
+
34
+ /* Chip Control and Power Management */
35
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_CONTROL2, 0x50));
36
+ // normal all and power up all
37
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_CHIPPOWER, 0x00));
38
+
39
+ // vmidsel/500k
40
+ // EnRef=0,Play&Record Mode,(0x17-both of mic&play)
41
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_CONTROL1, 0x12));
42
+
43
+ // i2s 16 bits
44
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL1, 0x18));
45
+ // sample freq 256
46
+ // DACFsMode,SINGLE SPEED; DACFsRatio,256
47
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL2, 0x02));
48
+ // 0x00 audio on LIN1&RIN1, 0x09 LIN2&RIN2
49
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL16, 0x00));
50
+ // only left DAC to left mixer enable 0db
51
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL17, 0x90));
52
+ // only right DAC to right mixer enable 0db
53
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL20, 0x90));
54
+ // set internal ADC and DAC use the same LRCK clock, ADC LRCK as internal LRCK
55
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL21, 0x80));
56
+ // vroi=0 - 1.5k VREF to analog output resistance (default)
57
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL23, 0x00));
58
+
59
+ // power down adc and line in
60
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCPOWER, 0xFF));
61
+
62
+ //@nightdav
63
+ ES8388_ERROR_FAILED(
64
+ this->write_byte(ES8388_ADCCONTROL1, 0x00)); // +21dB : recommended value for ALC & voice recording
65
+
66
+ // set to Mono Right
67
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL3, 0x02));
68
+
69
+ // I2S 16 Bits length and I2S serial audio data format
70
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL4, 0x0d));
71
+ // ADCFsMode,singel SPEED,RATIO=256
72
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL5, 0x02));
73
+
74
+ // ADC Volume
75
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL8, 0x00));
76
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL9, 0x00));
77
+
78
+ //@nightDav
79
+ // ALC Config (as recommended by ES8388 user guide for voice recording)
80
+
81
+ // Reg 0x12 = 0xe2 (ALC enable, PGA Max. Gain=23.5dB, Min. Gain=0dB)
82
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL10, 0xe2));
83
+
84
+ // Reg 0x13 = 0xa0 (ALC Target=-1.5dB, ALC Hold time =0 mS)
85
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL11, 0xa0));
86
+ // Reg 0x14 = 0x12(Decay time =820uS , Attack time = 416 uS)
87
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL12, 0x12));
88
+
89
+ // Reg 0x15 = 0x06(ALC mode)
90
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL13, 0x06));
91
+
92
+ // Reg 0x16 = 0xc3(nose gate = -40.5dB, NGG = 0x01(mute ADC))
93
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL14, 0xc3));
94
+
95
+ // Power on ADC
96
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL21, 0x80));
97
+
98
+ // Start state machine
99
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_CHIPPOWER, 0xF0));
100
+ delay(1);
101
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_CHIPPOWER, 0x00));
102
+
103
+ // DAC volume max
104
+ // Set initial volume
105
+ // this->set_volume(0.75); // 0.75 = 0xBF = 0dB
106
+
107
+ this->set_mute_state_(false);
108
+
109
+ // unmute ADC with fade in
110
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCCONTROL7, 0x60));
111
+ // unmute DAC with fade in
112
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_DACCONTROL3, 0x20));
113
+
114
+ // Power on ADC, Enable LIN&RIN, Power off MICBIAS, set int1lp to low power mode
115
+ ES8388_ERROR_FAILED(this->write_byte(ES8388_ADCPOWER, 0x09));
116
+
117
+ #ifdef USE_SELECT
118
+ if (this->dac_output_select_ != nullptr) {
119
+ auto dac_power = this->get_dac_power();
120
+ if (dac_power.has_value()) {
121
+ auto dac_power_str = this->dac_output_select_->at(dac_power.value());
122
+ if (dac_power_str.has_value()) {
123
+ this->dac_output_select_->publish_state(dac_power_str.value());
124
+ } else {
125
+ ESP_LOGW(TAG, "Unknown DAC output power value: %d", dac_power.value());
126
+ }
127
+ }
128
+ }
129
+ if (this->adc_input_mic_select_ != nullptr) {
130
+ auto mic_input = this->get_mic_input();
131
+ if (mic_input.has_value()) {
132
+ auto mic_input_str = this->adc_input_mic_select_->at(mic_input.value());
133
+ if (mic_input_str.has_value()) {
134
+ this->adc_input_mic_select_->publish_state(mic_input_str.value());
135
+ } else {
136
+ ESP_LOGW(TAG, "Unknown ADC input mic value: %d", mic_input.value());
137
+ }
138
+ }
139
+ }
140
+ #endif
141
+ }
142
+
143
+ void ES8388::dump_config() {
144
+ ESP_LOGCONFIG(TAG, "ES8388 Audio Codec:");
145
+ LOG_I2C_DEVICE(this);
146
+ #ifdef USE_SELECT
147
+ LOG_SELECT(" ", "DacOutputSelect", this->dac_output_select_);
148
+ LOG_SELECT(" ", "ADCInputMicSelect", this->adc_input_mic_select_);
149
+ #endif
150
+
151
+ if (this->is_failed()) {
152
+ ESP_LOGCONFIG(TAG, " Failed to initialize");
153
+ return;
154
+ }
155
+ }
156
+
157
+ bool ES8388::set_volume(float volume) {
158
+ volume = clamp(volume, 0.0f, 1.0f);
159
+ uint8_t value = remap<uint8_t, float>(volume, 0.0f, 1.0f, -96, 0);
160
+ ESP_LOGD(TAG, "Setting ES8388_DACCONTROL4 / ES8388_DACCONTROL5 to 0x%02X (volume: %f)", value, volume);
161
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL4, value));
162
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL5, value));
163
+
164
+ return true;
165
+ }
166
+
167
+ float ES8388::volume() {
168
+ uint8_t value;
169
+ ES8388_ERROR_CHECK(this->read_byte(ES8388_DACCONTROL4, &value));
170
+ return remap<float, uint8_t>(value, -96, 0, 0.0f, 1.0f);
171
+ }
172
+
173
+ bool ES8388::set_mute_state_(bool mute_state) {
174
+ uint8_t value = 0;
175
+
176
+ this->is_muted_ = mute_state;
177
+
178
+ ES8388_ERROR_CHECK(this->read_byte(ES8388_DACCONTROL3, &value));
179
+ ESP_LOGV(TAG, "Read ES8388_DACCONTROL3: 0x%02X", value);
180
+
181
+ if (mute_state) {
182
+ value = 0x3C;
183
+ }
184
+
185
+ ESP_LOGV(TAG, "Setting ES8388_DACCONTROL3 to 0x%02X (muted: %s)", value, YESNO(mute_state));
186
+ return this->write_byte(ES8388_DACCONTROL3, value);
187
+ }
188
+
189
+ // Set dac power output
190
+ bool ES8388::set_dac_output(DacOutputLine line) {
191
+ uint8_t reg_out1 = 0;
192
+ uint8_t reg_out2 = 0;
193
+ uint8_t dac_power = 0;
194
+
195
+ // 0x00: -30dB , 0x1E: 0dB
196
+ switch (line) {
197
+ case DAC_OUTPUT_LINE1:
198
+ reg_out1 = 0x1E;
199
+ dac_power = ES8388_DAC_OUTPUT_LOUT1_ROUT1;
200
+ break;
201
+ case DAC_OUTPUT_LINE2:
202
+ reg_out2 = 0x1E;
203
+ dac_power = ES8388_DAC_OUTPUT_LOUT2_ROUT2;
204
+ break;
205
+ case DAC_OUTPUT_BOTH:
206
+ reg_out1 = 0x1E;
207
+ reg_out2 = 0x1E;
208
+ dac_power = ES8388_DAC_OUTPUT_BOTH;
209
+ break;
210
+ default:
211
+ ESP_LOGE(TAG, "Unknown DAC output line: %d", line);
212
+ return false;
213
+ };
214
+
215
+ ESP_LOGV(TAG, "Setting ES8388_DACPOWER to 0x%02X", dac_power);
216
+ ESP_LOGV(TAG, "Setting ES8388_DACCONTROL24 / ES8388_DACCONTROL25 to 0x%02X", reg_out1);
217
+ ESP_LOGV(TAG, "Setting ES8388_DACCONTROL26 / ES8388_DACCONTROL27 to 0x%02X", reg_out2);
218
+
219
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL24, reg_out1)); // LOUT1VOL
220
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL25, reg_out1)); // ROUT1VOL
221
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL26, reg_out2)); // LOUT2VOL
222
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_DACCONTROL27, reg_out2)); // ROUT1VOL
223
+
224
+ return this->write_byte(ES8388_DACPOWER, dac_power);
225
+ }
226
+
227
+ optional<DacOutputLine> ES8388::get_dac_power() {
228
+ uint8_t dac_power;
229
+ if (!this->read_byte(ES8388_DACPOWER, &dac_power)) {
230
+ this->status_momentary_warning("Failed to read ES8388_DACPOWER");
231
+ return {};
232
+ }
233
+ switch (dac_power) {
234
+ case ES8388_DAC_OUTPUT_LOUT1_ROUT1:
235
+ return DAC_OUTPUT_LINE1;
236
+ case ES8388_DAC_OUTPUT_LOUT2_ROUT2:
237
+ return DAC_OUTPUT_LINE2;
238
+ case ES8388_DAC_OUTPUT_BOTH:
239
+ return DAC_OUTPUT_BOTH;
240
+ default:
241
+ return {};
242
+ }
243
+ }
244
+
245
+ // Set ADC input MIC
246
+ bool ES8388::set_adc_input_mic(AdcInputMicLine line) {
247
+ uint8_t mic_input = 0;
248
+
249
+ switch (line) {
250
+ case ADC_INPUT_MIC_LINE1:
251
+ mic_input = ES8388_ADC_INPUT_LINPUT1_RINPUT1;
252
+ break;
253
+ case ADC_INPUT_MIC_LINE2:
254
+ mic_input = ES8388_ADC_INPUT_LINPUT2_RINPUT2;
255
+ break;
256
+ case ADC_INPUT_MIC_DIFFERENCE:
257
+ mic_input = ES8388_ADC_INPUT_DIFFERENCE;
258
+ break;
259
+ default:
260
+ ESP_LOGE(TAG, "Unknown ADC input mic line: %d", line);
261
+ return false;
262
+ }
263
+
264
+ ESP_LOGV(TAG, "Setting ES8388_ADCCONTROL2 to 0x%02X", mic_input);
265
+ ES8388_ERROR_CHECK(this->write_byte(ES8388_ADCCONTROL2, mic_input));
266
+
267
+ return true;
268
+ }
269
+
270
+ optional<AdcInputMicLine> ES8388::get_mic_input() {
271
+ uint8_t mic_input;
272
+ if (!this->read_byte(ES8388_ADCCONTROL2, &mic_input)) {
273
+ this->status_momentary_warning("Failed to read ES8388_ADCCONTROL2");
274
+ return {};
275
+ }
276
+ switch (mic_input) {
277
+ case ES8388_ADC_INPUT_LINPUT1_RINPUT1:
278
+ return ADC_INPUT_MIC_LINE1;
279
+ case ES8388_ADC_INPUT_LINPUT2_RINPUT2:
280
+ return ADC_INPUT_MIC_LINE2;
281
+ case ES8388_ADC_INPUT_DIFFERENCE:
282
+ return ADC_INPUT_MIC_DIFFERENCE;
283
+ default:
284
+ return {};
285
+ };
286
+ }
287
+
288
+ } // namespace es8388
289
+ } // namespace esphome
@@ -0,0 +1,81 @@
1
+ #pragma once
2
+
3
+ #include <map>
4
+
5
+ #include "esphome/components/audio_dac/audio_dac.h"
6
+ #include "esphome/components/i2c/i2c.h"
7
+ #include "esphome/core/component.h"
8
+ #ifdef USE_SELECT
9
+ #include "esphome/components/select/select.h"
10
+ #endif
11
+
12
+ #include "es8388_const.h"
13
+
14
+ namespace esphome {
15
+ namespace es8388 {
16
+
17
+ enum DacOutputLine : uint8_t {
18
+ DAC_OUTPUT_LINE1,
19
+ DAC_OUTPUT_LINE2,
20
+ DAC_OUTPUT_BOTH,
21
+ };
22
+
23
+ enum AdcInputMicLine : uint8_t {
24
+ ADC_INPUT_MIC_LINE1,
25
+ ADC_INPUT_MIC_LINE2,
26
+ ADC_INPUT_MIC_DIFFERENCE,
27
+ };
28
+
29
+ class ES8388 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
30
+ #ifdef USE_SELECT
31
+ SUB_SELECT(dac_output)
32
+ SUB_SELECT(adc_input_mic)
33
+ #endif
34
+
35
+ public:
36
+ /////////////////////////
37
+ // Component overrides //
38
+ /////////////////////////
39
+
40
+ void setup() override;
41
+ float get_setup_priority() const override { return setup_priority::DATA; }
42
+ void dump_config() override;
43
+
44
+ ////////////////////////
45
+ // AudioDac overrides //
46
+ ////////////////////////
47
+
48
+ /// @brief Writes the volume out to the DAC
49
+ /// @param volume floating point between 0.0 and 1.0
50
+ /// @return True if successful and false otherwise
51
+ bool set_volume(float volume) override;
52
+
53
+ /// @brief Gets the current volume out from the DAC
54
+ /// @return floating point between 0.0 and 1.0
55
+ float volume() override;
56
+
57
+ /// @brief Disables mute for audio out
58
+ /// @return True if successful and false otherwise
59
+ bool set_mute_off() override { return this->set_mute_state_(false); }
60
+
61
+ /// @brief Enables mute for audio out
62
+ /// @return True if successful and false otherwise
63
+ bool set_mute_on() override { return this->set_mute_state_(true); }
64
+
65
+ bool is_muted() override { return this->is_muted_; }
66
+
67
+ optional<DacOutputLine> get_dac_power();
68
+ optional<AdcInputMicLine> get_mic_input();
69
+
70
+ bool set_dac_output(DacOutputLine line);
71
+ bool set_adc_input_mic(AdcInputMicLine line);
72
+
73
+ protected:
74
+ /// @brief Mutes or unmutes the DAC audio out
75
+ /// @param mute_state True to mute, false to unmute
76
+ /// @return True if successful and false otherwise
77
+ bool set_mute_state_(bool mute_state);
78
+ };
79
+
80
+ } // namespace es8388
81
+ } // namespace esphome
@@ -0,0 +1,83 @@
1
+ #pragma once
2
+ #include <cstdint>
3
+
4
+ namespace esphome {
5
+ namespace es8388 {
6
+
7
+ /* ES8388 register */
8
+ static const uint8_t ES8388_CONTROL1 = 0x00;
9
+ static const uint8_t ES8388_CONTROL2 = 0x01;
10
+
11
+ static const uint8_t ES8388_CHIPPOWER = 0x02;
12
+
13
+ static const uint8_t ES8388_ADCPOWER = 0x03;
14
+ static const uint8_t ES8388_DACPOWER = 0x04;
15
+
16
+ static const uint8_t ES8388_CHIPLOPOW1 = 0x05;
17
+ static const uint8_t ES8388_CHIPLOPOW2 = 0x06;
18
+
19
+ static const uint8_t ES8388_ANAVOLMANAG = 0x07;
20
+
21
+ static const uint8_t ES8388_MASTERMODE = 0x08;
22
+
23
+ /* ADC */
24
+ static const uint8_t ES8388_ADCCONTROL1 = 0x09;
25
+ static const uint8_t ES8388_ADCCONTROL2 = 0x0a;
26
+ static const uint8_t ES8388_ADCCONTROL3 = 0x0b;
27
+ static const uint8_t ES8388_ADCCONTROL4 = 0x0c;
28
+ static const uint8_t ES8388_ADCCONTROL5 = 0x0d;
29
+ static const uint8_t ES8388_ADCCONTROL6 = 0x0e;
30
+ static const uint8_t ES8388_ADCCONTROL7 = 0x0f;
31
+ static const uint8_t ES8388_ADCCONTROL8 = 0x10;
32
+ static const uint8_t ES8388_ADCCONTROL9 = 0x11;
33
+ static const uint8_t ES8388_ADCCONTROL10 = 0x12;
34
+ static const uint8_t ES8388_ADCCONTROL11 = 0x13;
35
+ static const uint8_t ES8388_ADCCONTROL12 = 0x14;
36
+ static const uint8_t ES8388_ADCCONTROL13 = 0x15;
37
+ static const uint8_t ES8388_ADCCONTROL14 = 0x16;
38
+ /* DAC */
39
+ static const uint8_t ES8388_DACCONTROL1 = 0x17;
40
+ static const uint8_t ES8388_DACCONTROL2 = 0x18;
41
+ static const uint8_t ES8388_DACCONTROL3 = 0x19;
42
+ static const uint8_t ES8388_DACCONTROL4 = 0x1a;
43
+ static const uint8_t ES8388_DACCONTROL5 = 0x1b;
44
+ static const uint8_t ES8388_DACCONTROL6 = 0x1c;
45
+ static const uint8_t ES8388_DACCONTROL7 = 0x1d;
46
+ static const uint8_t ES8388_DACCONTROL8 = 0x1e;
47
+ static const uint8_t ES8388_DACCONTROL9 = 0x1f;
48
+ static const uint8_t ES8388_DACCONTROL10 = 0x20;
49
+ static const uint8_t ES8388_DACCONTROL11 = 0x21;
50
+ static const uint8_t ES8388_DACCONTROL12 = 0x22;
51
+ static const uint8_t ES8388_DACCONTROL13 = 0x23;
52
+ static const uint8_t ES8388_DACCONTROL14 = 0x24;
53
+ static const uint8_t ES8388_DACCONTROL15 = 0x25;
54
+ static const uint8_t ES8388_DACCONTROL16 = 0x26;
55
+ static const uint8_t ES8388_DACCONTROL17 = 0x27;
56
+ static const uint8_t ES8388_DACCONTROL18 = 0x28;
57
+ static const uint8_t ES8388_DACCONTROL19 = 0x29;
58
+ static const uint8_t ES8388_DACCONTROL20 = 0x2a;
59
+ static const uint8_t ES8388_DACCONTROL21 = 0x2b;
60
+ static const uint8_t ES8388_DACCONTROL22 = 0x2c;
61
+ static const uint8_t ES8388_DACCONTROL23 = 0x2d;
62
+ static const uint8_t ES8388_DACCONTROL24 = 0x2e;
63
+ static const uint8_t ES8388_DACCONTROL25 = 0x2f;
64
+ static const uint8_t ES8388_DACCONTROL26 = 0x30;
65
+ static const uint8_t ES8388_DACCONTROL27 = 0x31;
66
+ static const uint8_t ES8388_DACCONTROL28 = 0x32;
67
+ static const uint8_t ES8388_DACCONTROL29 = 0x33;
68
+ static const uint8_t ES8388_DACCONTROL30 = 0x34;
69
+
70
+ static const uint8_t ES8388_DAC_OUTPUT_NONE = 0xC0; // ALL DAC DOWN
71
+
72
+ static const uint8_t ES8388_DAC_OUTPUT_LOUT1_ROUT1 = 0x30;
73
+ static const uint8_t ES8388_DAC_OUTPUT_LOUT2_ROUT2 = 0x0C;
74
+ static const uint8_t ES8388_DAC_OUTPUT_BOTH = 0x3C;
75
+
76
+ static const uint8_t ES8388_ADC_INPUT_LINPUT1_RINPUT1 = 0x00;
77
+ static const uint8_t ES8388_ADC_INPUT_MIC1 = 0x05;
78
+ static const uint8_t ES8388_ADC_INPUT_MIC2 = 0x06;
79
+ static const uint8_t ES8388_ADC_INPUT_LINPUT2_RINPUT2 = 0x50;
80
+ static const uint8_t ES8388_ADC_INPUT_DIFFERENCE = 0xf0;
81
+
82
+ } // namespace es8388
83
+ } // namespace esphome
@@ -0,0 +1,47 @@
1
+ import esphome.codegen as cg
2
+ from esphome.components import select
3
+ import esphome.config_validation as cv
4
+ from esphome.const import ENTITY_CATEGORY_CONFIG, ICON_CHIP # noqa: F401
5
+
6
+ from ..audio_dac import CONF_ES8388_ID, ES8388, es8388_ns
7
+
8
+ CONF_DAC_OUTPUT = "dac_output"
9
+ CONF_ADC_INPUT_MIC = "adc_input_mic"
10
+
11
+ DacOutputSelect = es8388_ns.class_("DacOutputSelect", select.Select)
12
+ ADCInputMicSelect = es8388_ns.class_("ADCInputMicSelect", select.Select)
13
+
14
+ CONFIG_SCHEMA = cv.All(
15
+ {
16
+ cv.GenerateID(CONF_ES8388_ID): cv.use_id(ES8388),
17
+ cv.Optional(CONF_DAC_OUTPUT): select.select_schema(
18
+ DacOutputSelect,
19
+ entity_category=ENTITY_CATEGORY_CONFIG,
20
+ icon=ICON_CHIP,
21
+ ),
22
+ cv.Optional(CONF_ADC_INPUT_MIC): select.select_schema(
23
+ ADCInputMicSelect,
24
+ entity_category=ENTITY_CATEGORY_CONFIG,
25
+ icon=ICON_CHIP,
26
+ ),
27
+ }
28
+ )
29
+
30
+
31
+ async def to_code(config):
32
+ parent = await cg.get_variable(config[CONF_ES8388_ID])
33
+ if dac_output_config := config.get(CONF_DAC_OUTPUT):
34
+ s = await select.new_select(
35
+ dac_output_config,
36
+ options=["LINE1", "LINE2", "BOTH"],
37
+ )
38
+ await cg.register_parented(s, parent)
39
+ cg.add(parent.set_dac_output_select(s))
40
+
41
+ if adc_input_mic_config := config.get(CONF_ADC_INPUT_MIC):
42
+ s = await select.new_select(
43
+ adc_input_mic_config,
44
+ options=["LINE1", "LINE2", "DIFFERENCE"],
45
+ )
46
+ await cg.register_parented(s, parent)
47
+ cg.add(parent.set_adc_input_mic_select(s))
@@ -0,0 +1,12 @@
1
+ #include "adc_input_mic_select.h"
2
+
3
+ namespace esphome {
4
+ namespace es8388 {
5
+
6
+ void ADCInputMicSelect::control(const std::string &value) {
7
+ this->publish_state(value);
8
+ this->parent_->set_adc_input_mic(static_cast<AdcInputMicLine>(this->index_of(value).value()));
9
+ }
10
+
11
+ } // namespace es8388
12
+ } // namespace esphome
@@ -0,0 +1,15 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/es8388/es8388.h"
4
+ #include "esphome/components/select/select.h"
5
+
6
+ namespace esphome {
7
+ namespace es8388 {
8
+
9
+ class ADCInputMicSelect : public select::Select, public Parented<ES8388> {
10
+ protected:
11
+ void control(const std::string &value) override;
12
+ };
13
+
14
+ } // namespace es8388
15
+ } // namespace esphome
@@ -0,0 +1,12 @@
1
+ #include "dac_output_select.h"
2
+
3
+ namespace esphome {
4
+ namespace es8388 {
5
+
6
+ void DacOutputSelect::control(const std::string &value) {
7
+ this->publish_state(value);
8
+ this->parent_->set_dac_output(static_cast<DacOutputLine>(this->index_of(value).value()));
9
+ }
10
+
11
+ } // namespace es8388
12
+ } // namespace esphome
@@ -0,0 +1,15 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/es8388/es8388.h"
4
+ #include "esphome/components/select/select.h"
5
+
6
+ namespace esphome {
7
+ namespace es8388 {
8
+
9
+ class DacOutputSelect : public select::Select, public Parented<ES8388> {
10
+ protected:
11
+ void control(const std::string &value) override;
12
+ };
13
+
14
+ } // namespace es8388
15
+ } // namespace esphome