esphome 2025.7.4__py3-none-any.whl → 2025.8.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.

Potentially problematic release.


This version of esphome might be problematic. Click here for more details.

Files changed (754) hide show
  1. esphome/__main__.py +189 -82
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +112 -56
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +488 -118
  73. esphome/components/atm90e32/atm90e32.h +44 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +199 -58
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +40 -2
  149. esphome/components/esp32_ble/ble.cpp +12 -8
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +2 -4
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/font/__init__.py +9 -1
  209. esphome/components/fs3000/fs3000.cpp +0 -2
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  211. esphome/components/ft63x6/ft63x6.cpp +0 -1
  212. esphome/components/gdk101/gdk101.cpp +0 -1
  213. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  214. esphome/components/gl_r01_i2c/sensor.py +1 -1
  215. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  216. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  217. esphome/components/gpio_expander/cached_gpio.h +24 -15
  218. esphome/components/gps/__init__.py +6 -2
  219. esphome/components/gps/gps.cpp +50 -49
  220. esphome/components/gps/gps.h +4 -8
  221. esphome/components/gps/time/gps_time.cpp +3 -9
  222. esphome/components/gps/time/gps_time.h +4 -7
  223. esphome/components/graph/__init__.py +1 -1
  224. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  228. esphome/components/haier/climate.py +5 -10
  229. esphome/components/haier/haier_base.cpp +0 -1
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  231. esphome/components/hdc1080/hdc1080.cpp +0 -2
  232. esphome/components/heatpumpir/climate.py +2 -2
  233. esphome/components/hlw8012/hlw8012.cpp +0 -1
  234. esphome/components/hm3301/hm3301.cpp +0 -1
  235. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  236. esphome/components/homeassistant/__init__.py +1 -0
  237. esphome/components/homeassistant/number/__init__.py +1 -0
  238. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  239. esphome/components/homeassistant/switch/__init__.py +1 -0
  240. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  241. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  242. esphome/components/host/__init__.py +2 -0
  243. esphome/components/hte501/hte501.cpp +0 -1
  244. esphome/components/http_request/__init__.py +2 -3
  245. esphome/components/http_request/http_request_idf.cpp +2 -2
  246. esphome/components/htu21d/htu21d.cpp +0 -2
  247. esphome/components/htu31d/htu31d.cpp +0 -2
  248. esphome/components/hx711/hx711.cpp +0 -1
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  250. esphome/components/hydreon_rgxx/sensor.py +4 -5
  251. esphome/components/i2c/i2c_bus.h +1 -1
  252. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  253. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  254. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  255. esphome/components/i2s_audio/__init__.py +6 -5
  256. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  258. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +46 -19
  260. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -3
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  262. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  263. esphome/components/ili9xxx/display.py +4 -3
  264. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  265. esphome/components/image/__init__.py +123 -92
  266. esphome/components/improv_serial/__init__.py +7 -8
  267. esphome/components/ina219/ina219.cpp +0 -1
  268. esphome/components/ina226/ina226.cpp +0 -2
  269. esphome/components/ina260/ina260.cpp +0 -2
  270. esphome/components/ina2xx_base/__init__.py +2 -5
  271. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  272. esphome/components/ina3221/ina3221.cpp +0 -1
  273. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  274. esphome/components/interval/interval.h +5 -9
  275. esphome/components/json/__init__.py +1 -1
  276. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  277. esphome/components/lc709203f/lc709203f.cpp +0 -2
  278. esphome/components/lcd_gpio/display.py +1 -3
  279. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  280. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  281. esphome/components/ld2410/__init__.py +4 -6
  282. esphome/components/ld2410/binary_sensor.py +4 -0
  283. esphome/components/ld2410/ld2410.cpp +56 -100
  284. esphome/components/ld2410/ld2410.h +17 -15
  285. esphome/components/ld2410/sensor.py +24 -10
  286. esphome/components/ld2412/__init__.py +46 -0
  287. esphome/components/ld2412/binary_sensor.py +70 -0
  288. esphome/components/ld2412/button/__init__.py +74 -0
  289. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  290. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  291. esphome/components/ld2412/button/query_button.cpp +9 -0
  292. esphome/components/ld2412/button/query_button.h +18 -0
  293. esphome/components/ld2412/button/restart_button.cpp +9 -0
  294. esphome/components/ld2412/button/restart_button.h +18 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  296. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  297. esphome/components/ld2412/ld2412.cpp +861 -0
  298. esphome/components/ld2412/ld2412.h +141 -0
  299. esphome/components/ld2412/number/__init__.py +126 -0
  300. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  301. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  302. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  303. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  305. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  306. esphome/components/ld2412/select/__init__.py +82 -0
  307. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  308. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  309. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  310. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  311. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  312. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  313. esphome/components/ld2412/sensor.py +124 -0
  314. esphome/components/ld2412/switch/__init__.py +45 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  316. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  318. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  319. esphome/components/ld2412/text_sensor.py +34 -0
  320. esphome/components/ld2420/ld2420.cpp +0 -1
  321. esphome/components/ld2450/__init__.py +3 -4
  322. esphome/components/ld2450/binary_sensor.py +3 -0
  323. esphome/components/ld2450/ld2450.cpp +77 -165
  324. esphome/components/ld2450/ld2450.h +26 -54
  325. esphome/components/ld2450/sensor.py +120 -6
  326. esphome/components/ld2450/text_sensor.py +5 -4
  327. esphome/components/ld24xx/__init__.py +1 -0
  328. esphome/components/ld24xx/ld24xx.h +65 -0
  329. esphome/components/ledc/ledc_output.cpp +0 -1
  330. esphome/components/libretiny/__init__.py +2 -0
  331. esphome/components/light/__init__.py +0 -1
  332. esphome/components/light/effects.py +70 -45
  333. esphome/components/light/light_call.cpp +101 -66
  334. esphome/components/light/light_color_values.h +16 -11
  335. esphome/components/light/light_json_schema.cpp +46 -44
  336. esphome/components/light/light_state.cpp +8 -11
  337. esphome/components/light/light_traits.h +17 -0
  338. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  339. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  340. esphome/components/lock/__init__.py +0 -1
  341. esphome/components/logger/__init__.py +31 -9
  342. esphome/components/logger/logger.cpp +12 -7
  343. esphome/components/logger/logger.h +25 -14
  344. esphome/components/logger/logger_esp32.cpp +2 -7
  345. esphome/components/logger/logger_esp8266.cpp +2 -4
  346. esphome/components/logger/logger_host.cpp +2 -4
  347. esphome/components/logger/logger_libretiny.cpp +2 -4
  348. esphome/components/logger/logger_rp2040.cpp +2 -4
  349. esphome/components/logger/logger_zephyr.cpp +86 -0
  350. esphome/components/logger/select/logger_level_select.cpp +2 -4
  351. esphome/components/logger/select/logger_level_select.h +2 -4
  352. esphome/components/logger/task_log_buffer.cpp +2 -4
  353. esphome/components/logger/task_log_buffer.h +2 -4
  354. esphome/components/lps22/sensor.py +5 -5
  355. esphome/components/ltr390/ltr390.cpp +0 -2
  356. esphome/components/ltr501/ltr501.cpp +0 -1
  357. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  358. esphome/components/lvgl/__init__.py +14 -13
  359. esphome/components/lvgl/automation.py +2 -4
  360. esphome/components/lvgl/defines.py +0 -2
  361. esphome/components/lvgl/helpers.py +1 -1
  362. esphome/components/lvgl/lv_validation.py +7 -4
  363. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  364. esphome/components/lvgl/styles.py +2 -2
  365. esphome/components/lvgl/types.py +1 -1
  366. esphome/components/lvgl/widgets/__init__.py +2 -2
  367. esphome/components/lvgl/widgets/arc.py +14 -11
  368. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  369. esphome/components/lvgl/widgets/qrcode.py +7 -7
  370. esphome/components/lvgl/widgets/spinner.py +6 -6
  371. esphome/components/lvgl/widgets/switch.py +2 -2
  372. esphome/components/lvgl/widgets/tabview.py +3 -3
  373. esphome/components/lvgl/widgets/tileview.py +15 -7
  374. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  375. esphome/components/matrix_keypad/__init__.py +4 -3
  376. esphome/components/max17043/max17043.cpp +0 -2
  377. esphome/components/max31855/max31855.cpp +1 -4
  378. esphome/components/max31856/max31856.cpp +0 -4
  379. esphome/components/max31865/max31865.cpp +0 -1
  380. esphome/components/max44009/max44009.cpp +0 -1
  381. esphome/components/max6675/max6675.cpp +1 -4
  382. esphome/components/max6956/max6956.cpp +0 -1
  383. esphome/components/max7219/max7219.cpp +0 -1
  384. esphome/components/max7219digit/display.py +1 -1
  385. esphome/components/max7219digit/max7219digit.cpp +0 -1
  386. esphome/components/max9611/max9611.cpp +0 -1
  387. esphome/components/mcp23008/__init__.py +1 -1
  388. esphome/components/mcp23008/mcp23008.cpp +0 -1
  389. esphome/components/mcp23016/mcp23016.cpp +0 -1
  390. esphome/components/mcp23017/__init__.py +1 -1
  391. esphome/components/mcp23017/mcp23017.cpp +0 -1
  392. esphome/components/mcp23s08/__init__.py +1 -1
  393. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  394. esphome/components/mcp23s17/__init__.py +1 -1
  395. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  396. esphome/components/mcp23x08_base/__init__.py +2 -0
  397. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  398. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  399. esphome/components/mcp23x17_base/__init__.py +2 -0
  400. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  401. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  402. esphome/components/mcp23xxx_base/__init__.py +11 -5
  403. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  404. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  405. esphome/components/mcp3008/mcp3008.cpp +1 -4
  406. esphome/components/mcp3204/mcp3204.cpp +1 -4
  407. esphome/components/mcp4461/mcp4461.cpp +0 -1
  408. esphome/components/mcp4725/mcp4725.cpp +0 -1
  409. esphome/components/mcp4728/mcp4728.cpp +0 -1
  410. esphome/components/mcp9600/mcp9600.cpp +0 -2
  411. esphome/components/mcp9808/mcp9808.cpp +0 -2
  412. esphome/components/mdns/__init__.py +3 -0
  413. esphome/components/mdns/mdns_component.cpp +2 -0
  414. esphome/components/mdns/mdns_component.h +4 -0
  415. esphome/components/media_player/__init__.py +40 -0
  416. esphome/components/media_player/automation.h +16 -0
  417. esphome/components/media_player/media_player.cpp +13 -0
  418. esphome/components/media_player/media_player.h +50 -3
  419. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  420. esphome/components/mics_4514/mics_4514.cpp +1 -6
  421. esphome/components/midea/ir_transmitter.h +4 -4
  422. esphome/components/mipi/__init__.py +416 -0
  423. esphome/components/mipi_dsi/__init__.py +5 -0
  424. esphome/components/mipi_dsi/display.py +233 -0
  425. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  426. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  427. esphome/components/mipi_dsi/models/__init__.py +0 -0
  428. esphome/components/mipi_dsi/models/guition.py +38 -0
  429. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  430. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  431. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  432. esphome/components/mipi_spi/__init__.py +0 -9
  433. esphome/components/mipi_spi/display.py +220 -256
  434. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  435. esphome/components/mipi_spi/mipi_spi.h +556 -108
  436. esphome/components/mipi_spi/models/__init__.py +0 -65
  437. esphome/components/mipi_spi/models/adafruit.py +30 -0
  438. esphome/components/mipi_spi/models/amoled.py +41 -5
  439. esphome/components/mipi_spi/models/ili.py +5 -5
  440. esphome/components/mipi_spi/models/jc.py +1 -3
  441. esphome/components/mipi_spi/models/lilygo.py +1 -1
  442. esphome/components/mipi_spi/models/waveshare.py +16 -1
  443. esphome/components/mixer/speaker/__init__.py +4 -5
  444. esphome/components/mlx90393/sensor.py +7 -5
  445. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  446. esphome/components/mlx90614/mlx90614.cpp +0 -1
  447. esphome/components/mmc5603/mmc5603.cpp +0 -1
  448. esphome/components/mmc5983/mmc5983.cpp +0 -2
  449. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  450. esphome/components/mpr121/__init__.py +7 -6
  451. esphome/components/mpr121/mpr121.cpp +0 -1
  452. esphome/components/mpu6050/mpu6050.cpp +0 -1
  453. esphome/components/mpu6886/mpu6886.cpp +0 -1
  454. esphome/components/mqtt/__init__.py +1 -2
  455. esphome/components/mqtt/mqtt_button.cpp +1 -1
  456. esphome/components/mqtt/mqtt_client.cpp +0 -1
  457. esphome/components/mqtt/mqtt_component.cpp +8 -14
  458. esphome/components/mqtt/mqtt_component.h +0 -7
  459. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_sensor.h +0 -1
  461. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  462. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  463. esphome/components/ms5611/ms5611.cpp +0 -1
  464. esphome/components/ms8607/ms8607.cpp +0 -1
  465. esphome/components/msa3xx/msa3xx.cpp +0 -2
  466. esphome/components/my9231/my9231.cpp +0 -2
  467. esphome/components/nau7802/nau7802.cpp +0 -1
  468. esphome/components/neopixelbus/light.py +3 -0
  469. esphome/components/network/util.cpp +29 -0
  470. esphome/components/nextion/nextion.cpp +0 -1
  471. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  472. esphome/components/npi19/npi19.cpp +0 -2
  473. esphome/components/nrf52/__init__.py +223 -0
  474. esphome/components/nrf52/boards.py +34 -0
  475. esphome/components/nrf52/const.py +18 -0
  476. esphome/components/nrf52/gpio.py +79 -0
  477. esphome/components/number/__init__.py +2 -1
  478. esphome/components/one_wire/__init__.py +1 -2
  479. esphome/components/one_wire/one_wire.cpp +0 -2
  480. esphome/components/one_wire/one_wire.h +0 -2
  481. esphome/components/opentherm/hub.cpp +0 -1
  482. esphome/components/opentherm/number/__init__.py +2 -2
  483. esphome/components/openthread/__init__.py +2 -3
  484. esphome/components/openthread/openthread.cpp +30 -13
  485. esphome/components/openthread/openthread.h +3 -0
  486. esphome/components/openthread/openthread_esp.cpp +3 -1
  487. esphome/components/opt3001/sensor.py +2 -6
  488. esphome/components/output/__init__.py +38 -0
  489. esphome/components/output/automation.h +24 -0
  490. esphome/components/output/switch/output_switch.cpp +0 -2
  491. esphome/components/packages/__init__.py +1 -2
  492. esphome/components/packet_transport/__init__.py +4 -3
  493. esphome/components/pca6416a/pca6416a.cpp +0 -1
  494. esphome/components/pca9554/pca9554.cpp +0 -1
  495. esphome/components/pca9685/pca9685_output.cpp +0 -2
  496. esphome/components/pcf85063/pcf85063.cpp +0 -1
  497. esphome/components/pcf8563/pcf8563.cpp +0 -1
  498. esphome/components/pcf8574/pcf8574.cpp +0 -1
  499. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  500. esphome/components/pipsolar/sensor/__init__.py +1 -1
  501. esphome/components/pm2005/pm2005.cpp +0 -1
  502. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  503. esphome/components/pmwcs3/sensor.py +1 -2
  504. esphome/components/pn532/pn532.cpp +0 -2
  505. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  506. esphome/components/power_supply/power_supply.cpp +7 -10
  507. esphome/components/power_supply/power_supply.h +1 -1
  508. esphome/components/psram/__init__.py +2 -1
  509. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  510. esphome/components/pulse_counter/sensor.py +9 -6
  511. esphome/components/pylontech/pylontech.cpp +0 -1
  512. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  513. esphome/components/qmp6988/qmp6988.cpp +0 -2
  514. esphome/components/qspi_dbi/display.py +2 -3
  515. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  516. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  517. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  518. esphome/components/rc522/rc522.cpp +9 -31
  519. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  520. esphome/components/remote_base/__init__.py +5 -6
  521. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  522. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  523. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  524. esphome/components/remote_transmitter/__init__.py +26 -0
  525. esphome/components/remote_transmitter/automation.h +18 -0
  526. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  527. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  528. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  529. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  530. esphome/components/resampler/speaker/__init__.py +4 -5
  531. esphome/components/rf_bridge/__init__.py +4 -8
  532. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  533. esphome/components/rp2040/__init__.py +3 -1
  534. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  535. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  536. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  537. esphome/components/rpi_dpi_rgb/display.py +13 -15
  538. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  539. esphome/components/runtime_stats/__init__.py +34 -0
  540. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  541. esphome/components/runtime_stats/runtime_stats.h +132 -0
  542. esphome/components/scd30/scd30.cpp +0 -2
  543. esphome/components/scd30/sensor.py +1 -2
  544. esphome/components/scd4x/scd4x.cpp +0 -1
  545. esphome/components/scd4x/sensor.py +1 -3
  546. esphome/components/sdl/display.py +3 -1
  547. esphome/components/sdl/sdl_esphome.cpp +0 -2
  548. esphome/components/sdp3x/sdp3x.cpp +0 -2
  549. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  550. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  551. esphome/components/select/__init__.py +2 -3
  552. esphome/components/select/select_traits.cpp +1 -1
  553. esphome/components/select/select_traits.h +1 -1
  554. esphome/components/sen0321/sen0321.cpp +0 -1
  555. esphome/components/sen5x/sen5x.cpp +0 -2
  556. esphome/components/sensor/__init__.py +36 -4
  557. esphome/components/sensor/filter.cpp +49 -10
  558. esphome/components/sensor/filter.h +22 -7
  559. esphome/components/sensor/sensor.cpp +0 -1
  560. esphome/components/sensor/sensor.h +0 -9
  561. esphome/components/sfa30/sfa30.cpp +0 -4
  562. esphome/components/sgp30/sgp30.cpp +0 -2
  563. esphome/components/sgp4x/sensor.py +1 -1
  564. esphome/components/sgp4x/sgp4x.cpp +0 -2
  565. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  566. esphome/components/sht3xd/sht3xd.cpp +0 -2
  567. esphome/components/sht4x/sht4x.cpp +0 -2
  568. esphome/components/shtcx/shtcx.cpp +0 -1
  569. esphome/components/sim800l/__init__.py +2 -4
  570. esphome/components/sm16716/sm16716.cpp +0 -1
  571. esphome/components/sm2135/sm2135.cpp +0 -1
  572. esphome/components/sm2235/sm2235.cpp +0 -1
  573. esphome/components/sm2335/sm2335.cpp +0 -1
  574. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  575. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  576. esphome/components/sntp/sntp_component.cpp +0 -1
  577. esphome/components/sound_level/sensor.py +1 -1
  578. esphome/components/speaker/media_player/__init__.py +21 -33
  579. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  580. esphome/components/spi/__init__.py +29 -13
  581. esphome/components/spi/spi.cpp +0 -2
  582. esphome/components/spi_device/spi_device.cpp +1 -4
  583. esphome/components/sprinkler/__init__.py +4 -4
  584. esphome/components/sps30/sps30.cpp +0 -1
  585. esphome/components/ssd1306_base/__init__.py +11 -11
  586. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  587. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  588. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  589. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  590. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  591. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  592. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  593. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  594. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  595. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  596. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  597. esphome/components/st7701s/display.py +10 -14
  598. esphome/components/st7701s/st7701s.cpp +0 -3
  599. esphome/components/st7735/st7735.cpp +0 -1
  600. esphome/components/st7789v/st7789v.cpp +0 -1
  601. esphome/components/st7920/st7920.cpp +0 -1
  602. esphome/components/status_led/light/status_led_light.cpp +0 -2
  603. esphome/components/status_led/status_led.cpp +0 -1
  604. esphome/components/stepper/__init__.py +2 -4
  605. esphome/components/sts3x/sts3x.cpp +0 -1
  606. esphome/components/substitutions/__init__.py +10 -16
  607. esphome/components/substitutions/jinja.py +24 -1
  608. esphome/components/sun/__init__.py +2 -3
  609. esphome/components/switch/__init__.py +31 -1
  610. esphome/components/switch/automation.h +24 -0
  611. esphome/components/switch/switch.cpp +8 -0
  612. esphome/components/switch/switch.h +8 -0
  613. esphome/components/sx126x/sx126x.cpp +0 -2
  614. esphome/components/sx127x/sx127x.cpp +0 -2
  615. esphome/components/sx1509/__init__.py +7 -5
  616. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  617. esphome/components/sx1509/sx1509.cpp +0 -2
  618. esphome/components/syslog/esphome_syslog.cpp +1 -1
  619. esphome/components/tc74/tc74.cpp +0 -1
  620. esphome/components/tca9548a/tca9548a.cpp +0 -1
  621. esphome/components/tca9555/tca9555.cpp +0 -1
  622. esphome/components/tcs34725/tcs34725.cpp +0 -1
  623. esphome/components/tee501/tee501.cpp +0 -1
  624. esphome/components/tem3200/tem3200.cpp +0 -2
  625. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  626. esphome/components/template/cover/template_cover.cpp +0 -1
  627. esphome/components/template/select/template_select.cpp +0 -1
  628. esphome/components/template/text/template_text.cpp +0 -2
  629. esphome/components/template/valve/template_valve.cpp +0 -1
  630. esphome/components/text/__init__.py +0 -1
  631. esphome/components/text/text_traits.h +2 -0
  632. esphome/components/text_sensor/__init__.py +2 -1
  633. esphome/components/text_sensor/text_sensor.cpp +0 -2
  634. esphome/components/text_sensor/text_sensor.h +0 -8
  635. esphome/components/thermostat/climate.py +4 -4
  636. esphome/components/time/__init__.py +7 -4
  637. esphome/components/time/real_time_clock.cpp +16 -3
  638. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  639. esphome/components/tlc5947/tlc5947.cpp +0 -2
  640. esphome/components/tlc5971/tlc5971.cpp +0 -2
  641. esphome/components/tm1621/tm1621.cpp +0 -2
  642. esphome/components/tm1637/tm1637.cpp +0 -2
  643. esphome/components/tm1638/tm1638.cpp +0 -2
  644. esphome/components/tm1651/__init__.py +45 -48
  645. esphome/components/tm1651/tm1651.cpp +213 -47
  646. esphome/components/tm1651/tm1651.h +37 -32
  647. esphome/components/tmp117/tmp117.cpp +0 -2
  648. esphome/components/tsl2561/tsl2561.cpp +0 -1
  649. esphome/components/tsl2591/tsl2591.cpp +0 -1
  650. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  651. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  652. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  653. esphome/components/tuya/climate/__init__.py +9 -10
  654. esphome/components/tuya/number/__init__.py +8 -6
  655. esphome/components/tx20/tx20.cpp +0 -1
  656. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  657. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  658. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  659. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  660. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  661. esphome/components/udp/__init__.py +1 -1
  662. esphome/components/ufire_ec/sensor.py +1 -2
  663. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  664. esphome/components/ufire_ise/sensor.py +1 -2
  665. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  666. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  667. esphome/components/update/__init__.py +0 -1
  668. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  669. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  670. esphome/components/usb_host/usb_host_client.cpp +0 -1
  671. esphome/components/usb_host/usb_host_component.cpp +0 -1
  672. esphome/components/valve/__init__.py +0 -1
  673. esphome/components/veml3235/veml3235.cpp +0 -3
  674. esphome/components/veml7700/veml7700.cpp +0 -2
  675. esphome/components/version/version_text_sensor.cpp +0 -1
  676. esphome/components/version/version_text_sensor.h +0 -1
  677. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  678. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  679. esphome/components/web_server/__init__.py +13 -0
  680. esphome/components/web_server/web_server.cpp +187 -352
  681. esphome/components/web_server/web_server.h +61 -1
  682. esphome/components/web_server_base/__init__.py +1 -1
  683. esphome/components/web_server_base/web_server_base.cpp +2 -0
  684. esphome/components/web_server_base/web_server_base.h +6 -0
  685. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  686. esphome/components/web_server_idf/web_server_idf.h +2 -0
  687. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  688. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  689. esphome/components/wifi/__init__.py +8 -43
  690. esphome/components/wifi/wifi_component.cpp +100 -36
  691. esphome/components/wifi/wifi_component.h +5 -1
  692. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  693. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  694. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  695. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  696. esphome/components/wireguard/wireguard.cpp +0 -2
  697. esphome/components/x9c/x9c.cpp +0 -2
  698. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  699. esphome/components/xl9535/xl9535.cpp +0 -2
  700. esphome/components/zephyr/__init__.py +252 -0
  701. esphome/components/zephyr/const.py +16 -0
  702. esphome/components/zephyr/core.cpp +90 -0
  703. esphome/components/zephyr/gpio.cpp +120 -0
  704. esphome/components/zephyr/gpio.h +38 -0
  705. esphome/components/zephyr/pre_build.py.script +4 -0
  706. esphome/components/zephyr/preferences.cpp +156 -0
  707. esphome/components/zephyr/preferences.h +13 -0
  708. esphome/config.py +38 -16
  709. esphome/config_helpers.py +1 -2
  710. esphome/config_validation.py +8 -15
  711. esphome/const.py +26 -1
  712. esphome/core/__init__.py +88 -51
  713. esphome/core/application.cpp +75 -21
  714. esphome/core/application.h +106 -171
  715. esphome/core/color.h +10 -0
  716. esphome/core/component.cpp +41 -25
  717. esphome/core/component.h +9 -6
  718. esphome/core/component_iterator.cpp +61 -261
  719. esphome/core/component_iterator.h +15 -0
  720. esphome/core/config.py +26 -11
  721. esphome/core/defines.h +40 -2
  722. esphome/core/entity_base.h +18 -0
  723. esphome/core/entity_helpers.py +41 -6
  724. esphome/core/helpers.cpp +8 -15
  725. esphome/core/helpers.h +60 -6
  726. esphome/core/lock_free_queue.h +1 -1
  727. esphome/core/scheduler.cpp +277 -74
  728. esphome/core/scheduler.h +89 -27
  729. esphome/cpp_generator.py +2 -6
  730. esphome/cpp_helpers.py +1 -1
  731. esphome/dashboard/dashboard.py +2 -3
  732. esphome/dashboard/dns.py +2 -8
  733. esphome/dashboard/web_server.py +34 -19
  734. esphome/espota2.py +1 -4
  735. esphome/git.py +3 -1
  736. esphome/helpers.py +23 -4
  737. esphome/log.py +3 -1
  738. esphome/mqtt.py +3 -5
  739. esphome/platformio_api.py +7 -4
  740. esphome/types.py +12 -0
  741. esphome/util.py +20 -8
  742. esphome/voluptuous_schema.py +4 -3
  743. esphome/vscode.py +1 -2
  744. esphome/wizard.py +1 -4
  745. esphome/writer.py +5 -107
  746. esphome/yaml_util.py +7 -5
  747. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
  748. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +753 -673
  749. esphome/components/mipi_spi/models/commands.py +0 -82
  750. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  751. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
  752. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
  753. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
  754. {esphome-2025.7.4.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,102 @@
1
+ import os
2
+
3
+ from esphome.const import __version__
4
+ from esphome.core import CORE
5
+ from esphome.helpers import mkdir_p, read_file, write_file_if_changed
6
+ from esphome.writer import find_begin_end, update_storage_json
7
+
8
+ INI_AUTO_GENERATE_BEGIN = "; ========== AUTO GENERATED CODE BEGIN ==========="
9
+ INI_AUTO_GENERATE_END = "; =========== AUTO GENERATED CODE END ============"
10
+
11
+ INI_BASE_FORMAT = (
12
+ """; Auto generated code by esphome
13
+
14
+ [common]
15
+ lib_deps =
16
+ build_flags =
17
+ upload_flags =
18
+
19
+ """,
20
+ """
21
+
22
+ """,
23
+ )
24
+
25
+
26
+ def format_ini(data: dict[str, str | list[str]]) -> str:
27
+ content = ""
28
+ for key, value in sorted(data.items()):
29
+ if isinstance(value, list):
30
+ content += f"{key} =\n"
31
+ for x in value:
32
+ content += f" {x}\n"
33
+ else:
34
+ content += f"{key} = {value}\n"
35
+ return content
36
+
37
+
38
+ def get_ini_content():
39
+ CORE.add_platformio_option(
40
+ "lib_deps",
41
+ [x.as_lib_dep for x in CORE.platformio_libraries.values()]
42
+ + ["${common.lib_deps}"],
43
+ )
44
+ # Sort to avoid changing build flags order
45
+ CORE.add_platformio_option("build_flags", sorted(CORE.build_flags))
46
+
47
+ # Sort to avoid changing build unflags order
48
+ CORE.add_platformio_option("build_unflags", sorted(CORE.build_unflags))
49
+
50
+ # Add extra script for C++ flags
51
+ CORE.add_platformio_option("extra_scripts", [f"pre:{CXX_FLAGS_FILE_NAME}"])
52
+
53
+ content = "[platformio]\n"
54
+ content += f"description = ESPHome {__version__}\n"
55
+
56
+ content += f"[env:{CORE.name}]\n"
57
+ content += format_ini(CORE.platformio_options)
58
+
59
+ return content
60
+
61
+
62
+ def write_ini(content):
63
+ update_storage_json()
64
+ path = CORE.relative_build_path("platformio.ini")
65
+
66
+ if os.path.isfile(path):
67
+ text = read_file(path)
68
+ content_format = find_begin_end(
69
+ text, INI_AUTO_GENERATE_BEGIN, INI_AUTO_GENERATE_END
70
+ )
71
+ else:
72
+ content_format = INI_BASE_FORMAT
73
+ full_file = f"{content_format[0] + INI_AUTO_GENERATE_BEGIN}\n{content}"
74
+ full_file += INI_AUTO_GENERATE_END + content_format[1]
75
+ write_file_if_changed(path, full_file)
76
+
77
+
78
+ def write_project():
79
+ mkdir_p(CORE.build_path)
80
+
81
+ content = get_ini_content()
82
+ write_ini(content)
83
+
84
+ # Write extra script for C++ specific flags
85
+ write_cxx_flags_script()
86
+
87
+
88
+ CXX_FLAGS_FILE_NAME = "cxx_flags.py"
89
+ CXX_FLAGS_FILE_CONTENTS = """# Auto-generated ESPHome script for C++ specific compiler flags
90
+ Import("env")
91
+
92
+ # Add C++ specific flags
93
+ """
94
+
95
+
96
+ def write_cxx_flags_script() -> None:
97
+ path = CORE.relative_build_path(CXX_FLAGS_FILE_NAME)
98
+ contents = CXX_FLAGS_FILE_CONTENTS
99
+ if not CORE.is_host:
100
+ contents += 'env.Append(CXXFLAGS=["-Wno-volatile"])'
101
+ contents += "\n"
102
+ write_file_if_changed(path, contents)
@@ -7,7 +7,6 @@ namespace a4988 {
7
7
  static const char *const TAG = "a4988.stepper";
8
8
 
9
9
  void A4988::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  if (this->sleep_pin_ != nullptr) {
12
11
  this->sleep_pin_->setup();
13
12
  this->sleep_pin_->digital_write(false);
@@ -7,8 +7,6 @@ namespace absolute_humidity {
7
7
  static const char *const TAG = "absolute_humidity.sensor";
8
8
 
9
9
  void AbsoluteHumidityComponent::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->get_name().c_str());
11
-
12
10
  ESP_LOGD(TAG, " Added callback for temperature '%s'", this->temperature_sensor_->get_name().c_str());
13
11
  this->temperature_sensor_->add_on_state_callback([this](float state) { this->temperature_callback_(state); });
14
12
  if (this->temperature_sensor_->has_state()) {
@@ -5,7 +5,7 @@ from esphome.const import (
5
5
  CONF_EQUATION,
6
6
  CONF_HUMIDITY,
7
7
  CONF_TEMPERATURE,
8
- ICON_WATER,
8
+ DEVICE_CLASS_ABSOLUTE_HUMIDITY,
9
9
  STATE_CLASS_MEASUREMENT,
10
10
  UNIT_GRAMS_PER_CUBIC_METER,
11
11
  )
@@ -27,8 +27,8 @@ EQUATION = {
27
27
  CONFIG_SCHEMA = (
28
28
  sensor.sensor_schema(
29
29
  unit_of_measurement=UNIT_GRAMS_PER_CUBIC_METER,
30
- icon=ICON_WATER,
31
30
  accuracy_decimals=2,
31
+ device_class=DEVICE_CLASS_ABSOLUTE_HUMIDITY,
32
32
  state_class=STATE_CLASS_MEASUREMENT,
33
33
  )
34
34
  .extend(
@@ -1,10 +1,11 @@
1
1
  from esphome import pins
2
2
  import esphome.codegen as cg
3
- from esphome.components.esp32 import get_esp32_variant
3
+ from esphome.components.esp32 import VARIANT_ESP32P4, get_esp32_variant
4
4
  from esphome.components.esp32.const import (
5
5
  VARIANT_ESP32,
6
6
  VARIANT_ESP32C2,
7
7
  VARIANT_ESP32C3,
8
+ VARIANT_ESP32C5,
8
9
  VARIANT_ESP32C6,
9
10
  VARIANT_ESP32H2,
10
11
  VARIANT_ESP32S2,
@@ -51,82 +52,103 @@ SAMPLING_MODES = {
51
52
  "max": sampling_mode.MAX,
52
53
  }
53
54
 
54
- adc1_channel_t = cg.global_ns.enum("adc1_channel_t")
55
- adc2_channel_t = cg.global_ns.enum("adc2_channel_t")
55
+ adc_unit_t = cg.global_ns.enum("adc_unit_t", is_class=True)
56
+
57
+ adc_channel_t = cg.global_ns.enum("adc_channel_t", is_class=True)
56
58
 
57
59
  # pin to adc1 channel mapping
58
60
  # https://github.com/espressif/esp-idf/blob/v4.4.8/components/driver/include/driver/adc.h
59
61
  ESP32_VARIANT_ADC1_PIN_TO_CHANNEL = {
60
62
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32/include/soc/adc_channel.h
61
63
  VARIANT_ESP32: {
62
- 36: adc1_channel_t.ADC1_CHANNEL_0,
63
- 37: adc1_channel_t.ADC1_CHANNEL_1,
64
- 38: adc1_channel_t.ADC1_CHANNEL_2,
65
- 39: adc1_channel_t.ADC1_CHANNEL_3,
66
- 32: adc1_channel_t.ADC1_CHANNEL_4,
67
- 33: adc1_channel_t.ADC1_CHANNEL_5,
68
- 34: adc1_channel_t.ADC1_CHANNEL_6,
69
- 35: adc1_channel_t.ADC1_CHANNEL_7,
64
+ 36: adc_channel_t.ADC_CHANNEL_0,
65
+ 37: adc_channel_t.ADC_CHANNEL_1,
66
+ 38: adc_channel_t.ADC_CHANNEL_2,
67
+ 39: adc_channel_t.ADC_CHANNEL_3,
68
+ 32: adc_channel_t.ADC_CHANNEL_4,
69
+ 33: adc_channel_t.ADC_CHANNEL_5,
70
+ 34: adc_channel_t.ADC_CHANNEL_6,
71
+ 35: adc_channel_t.ADC_CHANNEL_7,
70
72
  },
71
73
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c2/include/soc/adc_channel.h
72
74
  VARIANT_ESP32C2: {
73
- 0: adc1_channel_t.ADC1_CHANNEL_0,
74
- 1: adc1_channel_t.ADC1_CHANNEL_1,
75
- 2: adc1_channel_t.ADC1_CHANNEL_2,
76
- 3: adc1_channel_t.ADC1_CHANNEL_3,
77
- 4: adc1_channel_t.ADC1_CHANNEL_4,
75
+ 0: adc_channel_t.ADC_CHANNEL_0,
76
+ 1: adc_channel_t.ADC_CHANNEL_1,
77
+ 2: adc_channel_t.ADC_CHANNEL_2,
78
+ 3: adc_channel_t.ADC_CHANNEL_3,
79
+ 4: adc_channel_t.ADC_CHANNEL_4,
78
80
  },
79
81
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c3/include/soc/adc_channel.h
80
82
  VARIANT_ESP32C3: {
81
- 0: adc1_channel_t.ADC1_CHANNEL_0,
82
- 1: adc1_channel_t.ADC1_CHANNEL_1,
83
- 2: adc1_channel_t.ADC1_CHANNEL_2,
84
- 3: adc1_channel_t.ADC1_CHANNEL_3,
85
- 4: adc1_channel_t.ADC1_CHANNEL_4,
83
+ 0: adc_channel_t.ADC_CHANNEL_0,
84
+ 1: adc_channel_t.ADC_CHANNEL_1,
85
+ 2: adc_channel_t.ADC_CHANNEL_2,
86
+ 3: adc_channel_t.ADC_CHANNEL_3,
87
+ 4: adc_channel_t.ADC_CHANNEL_4,
88
+ },
89
+ # ESP32-C5 ADC1 pin mapping - based on official ESP-IDF documentation
90
+ # https://docs.espressif.com/projects/esp-idf/en/latest/esp32c5/api-reference/peripherals/gpio.html
91
+ VARIANT_ESP32C5: {
92
+ 1: adc_channel_t.ADC_CHANNEL_0,
93
+ 2: adc_channel_t.ADC_CHANNEL_1,
94
+ 3: adc_channel_t.ADC_CHANNEL_2,
95
+ 4: adc_channel_t.ADC_CHANNEL_3,
96
+ 5: adc_channel_t.ADC_CHANNEL_4,
97
+ 6: adc_channel_t.ADC_CHANNEL_5,
86
98
  },
87
99
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c6/include/soc/adc_channel.h
88
100
  VARIANT_ESP32C6: {
89
- 0: adc1_channel_t.ADC1_CHANNEL_0,
90
- 1: adc1_channel_t.ADC1_CHANNEL_1,
91
- 2: adc1_channel_t.ADC1_CHANNEL_2,
92
- 3: adc1_channel_t.ADC1_CHANNEL_3,
93
- 4: adc1_channel_t.ADC1_CHANNEL_4,
94
- 5: adc1_channel_t.ADC1_CHANNEL_5,
95
- 6: adc1_channel_t.ADC1_CHANNEL_6,
101
+ 0: adc_channel_t.ADC_CHANNEL_0,
102
+ 1: adc_channel_t.ADC_CHANNEL_1,
103
+ 2: adc_channel_t.ADC_CHANNEL_2,
104
+ 3: adc_channel_t.ADC_CHANNEL_3,
105
+ 4: adc_channel_t.ADC_CHANNEL_4,
106
+ 5: adc_channel_t.ADC_CHANNEL_5,
107
+ 6: adc_channel_t.ADC_CHANNEL_6,
96
108
  },
97
109
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32h2/include/soc/adc_channel.h
98
110
  VARIANT_ESP32H2: {
99
- 1: adc1_channel_t.ADC1_CHANNEL_0,
100
- 2: adc1_channel_t.ADC1_CHANNEL_1,
101
- 3: adc1_channel_t.ADC1_CHANNEL_2,
102
- 4: adc1_channel_t.ADC1_CHANNEL_3,
103
- 5: adc1_channel_t.ADC1_CHANNEL_4,
111
+ 1: adc_channel_t.ADC_CHANNEL_0,
112
+ 2: adc_channel_t.ADC_CHANNEL_1,
113
+ 3: adc_channel_t.ADC_CHANNEL_2,
114
+ 4: adc_channel_t.ADC_CHANNEL_3,
115
+ 5: adc_channel_t.ADC_CHANNEL_4,
104
116
  },
105
117
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32s2/include/soc/adc_channel.h
106
118
  VARIANT_ESP32S2: {
107
- 1: adc1_channel_t.ADC1_CHANNEL_0,
108
- 2: adc1_channel_t.ADC1_CHANNEL_1,
109
- 3: adc1_channel_t.ADC1_CHANNEL_2,
110
- 4: adc1_channel_t.ADC1_CHANNEL_3,
111
- 5: adc1_channel_t.ADC1_CHANNEL_4,
112
- 6: adc1_channel_t.ADC1_CHANNEL_5,
113
- 7: adc1_channel_t.ADC1_CHANNEL_6,
114
- 8: adc1_channel_t.ADC1_CHANNEL_7,
115
- 9: adc1_channel_t.ADC1_CHANNEL_8,
116
- 10: adc1_channel_t.ADC1_CHANNEL_9,
119
+ 1: adc_channel_t.ADC_CHANNEL_0,
120
+ 2: adc_channel_t.ADC_CHANNEL_1,
121
+ 3: adc_channel_t.ADC_CHANNEL_2,
122
+ 4: adc_channel_t.ADC_CHANNEL_3,
123
+ 5: adc_channel_t.ADC_CHANNEL_4,
124
+ 6: adc_channel_t.ADC_CHANNEL_5,
125
+ 7: adc_channel_t.ADC_CHANNEL_6,
126
+ 8: adc_channel_t.ADC_CHANNEL_7,
127
+ 9: adc_channel_t.ADC_CHANNEL_8,
128
+ 10: adc_channel_t.ADC_CHANNEL_9,
117
129
  },
118
130
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32s3/include/soc/adc_channel.h
119
131
  VARIANT_ESP32S3: {
120
- 1: adc1_channel_t.ADC1_CHANNEL_0,
121
- 2: adc1_channel_t.ADC1_CHANNEL_1,
122
- 3: adc1_channel_t.ADC1_CHANNEL_2,
123
- 4: adc1_channel_t.ADC1_CHANNEL_3,
124
- 5: adc1_channel_t.ADC1_CHANNEL_4,
125
- 6: adc1_channel_t.ADC1_CHANNEL_5,
126
- 7: adc1_channel_t.ADC1_CHANNEL_6,
127
- 8: adc1_channel_t.ADC1_CHANNEL_7,
128
- 9: adc1_channel_t.ADC1_CHANNEL_8,
129
- 10: adc1_channel_t.ADC1_CHANNEL_9,
132
+ 1: adc_channel_t.ADC_CHANNEL_0,
133
+ 2: adc_channel_t.ADC_CHANNEL_1,
134
+ 3: adc_channel_t.ADC_CHANNEL_2,
135
+ 4: adc_channel_t.ADC_CHANNEL_3,
136
+ 5: adc_channel_t.ADC_CHANNEL_4,
137
+ 6: adc_channel_t.ADC_CHANNEL_5,
138
+ 7: adc_channel_t.ADC_CHANNEL_6,
139
+ 8: adc_channel_t.ADC_CHANNEL_7,
140
+ 9: adc_channel_t.ADC_CHANNEL_8,
141
+ 10: adc_channel_t.ADC_CHANNEL_9,
142
+ },
143
+ VARIANT_ESP32P4: {
144
+ 16: adc_channel_t.ADC_CHANNEL_0,
145
+ 17: adc_channel_t.ADC_CHANNEL_1,
146
+ 18: adc_channel_t.ADC_CHANNEL_2,
147
+ 19: adc_channel_t.ADC_CHANNEL_3,
148
+ 20: adc_channel_t.ADC_CHANNEL_4,
149
+ 21: adc_channel_t.ADC_CHANNEL_5,
150
+ 22: adc_channel_t.ADC_CHANNEL_6,
151
+ 23: adc_channel_t.ADC_CHANNEL_7,
130
152
  },
131
153
  }
132
154
 
@@ -135,54 +157,64 @@ ESP32_VARIANT_ADC1_PIN_TO_CHANNEL = {
135
157
  ESP32_VARIANT_ADC2_PIN_TO_CHANNEL = {
136
158
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32/include/soc/adc_channel.h
137
159
  VARIANT_ESP32: {
138
- 4: adc2_channel_t.ADC2_CHANNEL_0,
139
- 0: adc2_channel_t.ADC2_CHANNEL_1,
140
- 2: adc2_channel_t.ADC2_CHANNEL_2,
141
- 15: adc2_channel_t.ADC2_CHANNEL_3,
142
- 13: adc2_channel_t.ADC2_CHANNEL_4,
143
- 12: adc2_channel_t.ADC2_CHANNEL_5,
144
- 14: adc2_channel_t.ADC2_CHANNEL_6,
145
- 27: adc2_channel_t.ADC2_CHANNEL_7,
146
- 25: adc2_channel_t.ADC2_CHANNEL_8,
147
- 26: adc2_channel_t.ADC2_CHANNEL_9,
160
+ 4: adc_channel_t.ADC_CHANNEL_0,
161
+ 0: adc_channel_t.ADC_CHANNEL_1,
162
+ 2: adc_channel_t.ADC_CHANNEL_2,
163
+ 15: adc_channel_t.ADC_CHANNEL_3,
164
+ 13: adc_channel_t.ADC_CHANNEL_4,
165
+ 12: adc_channel_t.ADC_CHANNEL_5,
166
+ 14: adc_channel_t.ADC_CHANNEL_6,
167
+ 27: adc_channel_t.ADC_CHANNEL_7,
168
+ 25: adc_channel_t.ADC_CHANNEL_8,
169
+ 26: adc_channel_t.ADC_CHANNEL_9,
148
170
  },
149
171
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c2/include/soc/adc_channel.h
150
172
  VARIANT_ESP32C2: {
151
- 5: adc2_channel_t.ADC2_CHANNEL_0,
173
+ 5: adc_channel_t.ADC_CHANNEL_0,
152
174
  },
153
175
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c3/include/soc/adc_channel.h
154
176
  VARIANT_ESP32C3: {
155
- 5: adc2_channel_t.ADC2_CHANNEL_0,
177
+ 5: adc_channel_t.ADC_CHANNEL_0,
156
178
  },
179
+ # ESP32-C5 has no ADC2 channels
180
+ VARIANT_ESP32C5: {}, # no ADC2
157
181
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32c6/include/soc/adc_channel.h
158
182
  VARIANT_ESP32C6: {}, # no ADC2
159
183
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32h2/include/soc/adc_channel.h
160
184
  VARIANT_ESP32H2: {}, # no ADC2
161
185
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32s2/include/soc/adc_channel.h
162
186
  VARIANT_ESP32S2: {
163
- 11: adc2_channel_t.ADC2_CHANNEL_0,
164
- 12: adc2_channel_t.ADC2_CHANNEL_1,
165
- 13: adc2_channel_t.ADC2_CHANNEL_2,
166
- 14: adc2_channel_t.ADC2_CHANNEL_3,
167
- 15: adc2_channel_t.ADC2_CHANNEL_4,
168
- 16: adc2_channel_t.ADC2_CHANNEL_5,
169
- 17: adc2_channel_t.ADC2_CHANNEL_6,
170
- 18: adc2_channel_t.ADC2_CHANNEL_7,
171
- 19: adc2_channel_t.ADC2_CHANNEL_8,
172
- 20: adc2_channel_t.ADC2_CHANNEL_9,
187
+ 11: adc_channel_t.ADC_CHANNEL_0,
188
+ 12: adc_channel_t.ADC_CHANNEL_1,
189
+ 13: adc_channel_t.ADC_CHANNEL_2,
190
+ 14: adc_channel_t.ADC_CHANNEL_3,
191
+ 15: adc_channel_t.ADC_CHANNEL_4,
192
+ 16: adc_channel_t.ADC_CHANNEL_5,
193
+ 17: adc_channel_t.ADC_CHANNEL_6,
194
+ 18: adc_channel_t.ADC_CHANNEL_7,
195
+ 19: adc_channel_t.ADC_CHANNEL_8,
196
+ 20: adc_channel_t.ADC_CHANNEL_9,
173
197
  },
174
198
  # https://github.com/espressif/esp-idf/blob/master/components/soc/esp32s3/include/soc/adc_channel.h
175
199
  VARIANT_ESP32S3: {
176
- 11: adc2_channel_t.ADC2_CHANNEL_0,
177
- 12: adc2_channel_t.ADC2_CHANNEL_1,
178
- 13: adc2_channel_t.ADC2_CHANNEL_2,
179
- 14: adc2_channel_t.ADC2_CHANNEL_3,
180
- 15: adc2_channel_t.ADC2_CHANNEL_4,
181
- 16: adc2_channel_t.ADC2_CHANNEL_5,
182
- 17: adc2_channel_t.ADC2_CHANNEL_6,
183
- 18: adc2_channel_t.ADC2_CHANNEL_7,
184
- 19: adc2_channel_t.ADC2_CHANNEL_8,
185
- 20: adc2_channel_t.ADC2_CHANNEL_9,
200
+ 11: adc_channel_t.ADC_CHANNEL_0,
201
+ 12: adc_channel_t.ADC_CHANNEL_1,
202
+ 13: adc_channel_t.ADC_CHANNEL_2,
203
+ 14: adc_channel_t.ADC_CHANNEL_3,
204
+ 15: adc_channel_t.ADC_CHANNEL_4,
205
+ 16: adc_channel_t.ADC_CHANNEL_5,
206
+ 17: adc_channel_t.ADC_CHANNEL_6,
207
+ 18: adc_channel_t.ADC_CHANNEL_7,
208
+ 19: adc_channel_t.ADC_CHANNEL_8,
209
+ 20: adc_channel_t.ADC_CHANNEL_9,
210
+ },
211
+ VARIANT_ESP32P4: {
212
+ 49: adc_channel_t.ADC_CHANNEL_0,
213
+ 50: adc_channel_t.ADC_CHANNEL_1,
214
+ 51: adc_channel_t.ADC_CHANNEL_2,
215
+ 52: adc_channel_t.ADC_CHANNEL_3,
216
+ 53: adc_channel_t.ADC_CHANNEL_4,
217
+ 54: adc_channel_t.ADC_CHANNEL_5,
186
218
  },
187
219
  }
188
220
 
@@ -235,6 +267,11 @@ def validate_adc_pin(value):
235
267
  {CONF_ANALOG: True, CONF_INPUT: True}, internal=True
236
268
  )(value)
237
269
 
270
+ if CORE.is_nrf52:
271
+ return pins.gpio_pin_schema(
272
+ {CONF_ANALOG: True, CONF_INPUT: True}, internal=True
273
+ )(value)
274
+
238
275
  raise NotImplementedError
239
276
 
240
277
 
@@ -251,5 +288,6 @@ FILTER_SOURCE_FILES = filter_source_files_from_platform(
251
288
  PlatformFramework.RTL87XX_ARDUINO,
252
289
  PlatformFramework.LN882X_ARDUINO,
253
290
  },
291
+ "adc_sensor_zephyr.cpp": {PlatformFramework.NRF52_ZEPHYR},
254
292
  }
255
293
  )
@@ -3,12 +3,19 @@
3
3
  #include "esphome/components/sensor/sensor.h"
4
4
  #include "esphome/components/voltage_sampler/voltage_sampler.h"
5
5
  #include "esphome/core/component.h"
6
+ #include "esphome/core/defines.h"
6
7
  #include "esphome/core/hal.h"
7
8
 
8
9
  #ifdef USE_ESP32
9
- #include <esp_adc_cal.h>
10
- #include "driver/adc.h"
11
- #endif // USE_ESP32
10
+ #include "esp_adc/adc_cali.h"
11
+ #include "esp_adc/adc_cali_scheme.h"
12
+ #include "esp_adc/adc_oneshot.h"
13
+ #include "hal/adc_types.h" // This defines ADC_CHANNEL_MAX
14
+ #endif // USE_ESP32
15
+
16
+ #ifdef USE_ZEPHYR
17
+ #include <zephyr/drivers/adc.h>
18
+ #endif
12
19
 
13
20
  namespace esphome {
14
21
  namespace adc {
@@ -35,50 +42,91 @@ enum class SamplingMode : uint8_t {
35
42
 
36
43
  const LogString *sampling_mode_to_str(SamplingMode mode);
37
44
 
38
- class Aggregator {
45
+ template<typename T> class Aggregator {
39
46
  public:
40
47
  Aggregator(SamplingMode mode);
41
- void add_sample(uint32_t value);
42
- uint32_t aggregate();
48
+ void add_sample(T value);
49
+ T aggregate();
43
50
 
44
51
  protected:
45
- uint32_t aggr_{0};
46
- uint32_t samples_{0};
52
+ T aggr_{0};
53
+ uint8_t samples_{0};
47
54
  SamplingMode mode_{SamplingMode::AVG};
48
55
  };
49
56
 
50
57
  class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage_sampler::VoltageSampler {
51
58
  public:
52
- #ifdef USE_ESP32
53
- /// Set the attenuation for this pin. Only available on the ESP32.
54
- void set_attenuation(adc_atten_t attenuation) { this->attenuation_ = attenuation; }
55
- void set_channel1(adc1_channel_t channel) {
56
- this->channel1_ = channel;
57
- this->channel2_ = ADC2_CHANNEL_MAX;
58
- }
59
- void set_channel2(adc2_channel_t channel) {
60
- this->channel2_ = channel;
61
- this->channel1_ = ADC1_CHANNEL_MAX;
62
- }
63
- void set_autorange(bool autorange) { this->autorange_ = autorange; }
64
- #endif // USE_ESP32
65
-
66
- /// Update ADC values
59
+ /// Update the sensor's state by reading the current ADC value.
60
+ /// This method is called periodically based on the update interval.
67
61
  void update() override;
68
- /// Setup ADC
62
+
63
+ /// Set up the ADC sensor by initializing hardware and calibration parameters.
64
+ /// This method is called once during device initialization.
69
65
  void setup() override;
66
+
67
+ /// Output the configuration details of the ADC sensor for debugging purposes.
68
+ /// This method is called during the ESPHome setup process to log the configuration.
70
69
  void dump_config() override;
71
- /// `HARDWARE_LATE` setup priority
70
+
71
+ /// Return the setup priority for this component.
72
+ /// Components with higher priority are initialized earlier during setup.
73
+ /// @return A float representing the setup priority.
72
74
  float get_setup_priority() const override;
75
+
76
+ #ifdef USE_ZEPHYR
77
+ /// Set the ADC channel to be used by the ADC sensor.
78
+ /// @param channel Pointer to an adc_dt_spec structure representing the ADC channel.
79
+ void set_adc_channel(const adc_dt_spec *channel) { this->channel_ = channel; }
80
+ #endif
81
+ /// Set the GPIO pin to be used by the ADC sensor.
82
+ /// @param pin Pointer to an InternalGPIOPin representing the ADC input pin.
73
83
  void set_pin(InternalGPIOPin *pin) { this->pin_ = pin; }
84
+
85
+ /// Enable or disable the output of raw ADC values (unprocessed data).
86
+ /// @param output_raw Boolean indicating whether to output raw ADC values (true) or processed values (false).
74
87
  void set_output_raw(bool output_raw) { this->output_raw_ = output_raw; }
88
+
89
+ /// Set the number of samples to be taken for ADC readings to improve accuracy.
90
+ /// A higher sample count reduces noise but increases the reading time.
91
+ /// @param sample_count The number of samples (e.g., 1, 4, 8).
75
92
  void set_sample_count(uint8_t sample_count);
93
+
94
+ /// Set the sampling mode for how multiple ADC samples are combined into a single measurement.
95
+ ///
96
+ /// When multiple samples are taken (controlled by set_sample_count), they can be combined
97
+ /// in one of three ways:
98
+ /// - SamplingMode::AVG: Compute the average (default)
99
+ /// - SamplingMode::MIN: Use the lowest sample value
100
+ /// - SamplingMode::MAX: Use the highest sample value
101
+ /// @param sampling_mode The desired sampling mode to use for aggregating ADC samples.
76
102
  void set_sampling_mode(SamplingMode sampling_mode);
103
+
104
+ /// Perform a single ADC sampling operation and return the measured value.
105
+ /// This function handles raw readings, calibration, and averaging as needed.
106
+ /// @return The sampled value as a float.
77
107
  float sample() override;
78
108
 
79
- #ifdef USE_ESP8266
80
- std::string unique_id() override;
81
- #endif // USE_ESP8266
109
+ #ifdef USE_ESP32
110
+ /// Set the ADC attenuation level to adjust the input voltage range.
111
+ /// This determines how the ADC interprets input voltages, allowing for greater precision
112
+ /// or the ability to measure higher voltages depending on the chosen attenuation level.
113
+ /// @param attenuation The desired ADC attenuation level (e.g., ADC_ATTEN_DB_0, ADC_ATTEN_DB_11).
114
+ void set_attenuation(adc_atten_t attenuation) { this->attenuation_ = attenuation; }
115
+
116
+ /// Configure the ADC to use a specific channel on a specific ADC unit.
117
+ /// This sets the channel for single-shot or continuous ADC measurements.
118
+ /// @param unit The ADC unit to use (ADC_UNIT_1 or ADC_UNIT_2).
119
+ /// @param channel The ADC channel to configure, such as ADC_CHANNEL_0, ADC_CHANNEL_3, etc.
120
+ void set_channel(adc_unit_t unit, adc_channel_t channel) {
121
+ this->adc_unit_ = unit;
122
+ this->channel_ = channel;
123
+ }
124
+
125
+ /// Set whether autoranging should be enabled for the ADC.
126
+ /// Autoranging automatically adjusts the attenuation level to handle a wide range of input voltages.
127
+ /// @param autorange Boolean indicating whether to enable autoranging.
128
+ void set_autorange(bool autorange) { this->autorange_ = autorange; }
129
+ #endif // USE_ESP32
82
130
 
83
131
  #ifdef USE_RP2040
84
132
  void set_is_temperature() { this->is_temperature_ = true; }
@@ -90,17 +138,32 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage
90
138
  InternalGPIOPin *pin_;
91
139
  SamplingMode sampling_mode_{SamplingMode::AVG};
92
140
 
141
+ #ifdef USE_ESP32
142
+ float sample_autorange_();
143
+ float sample_fixed_attenuation_();
144
+ bool autorange_{false};
145
+ adc_oneshot_unit_handle_t adc_handle_{nullptr};
146
+ adc_cali_handle_t calibration_handle_{nullptr};
147
+ adc_atten_t attenuation_{ADC_ATTEN_DB_0};
148
+ adc_channel_t channel_{};
149
+ adc_unit_t adc_unit_{};
150
+ struct SetupFlags {
151
+ uint8_t init_complete : 1;
152
+ uint8_t config_complete : 1;
153
+ uint8_t handle_init_complete : 1;
154
+ uint8_t calibration_complete : 1;
155
+ uint8_t reserved : 4;
156
+ } setup_flags_{};
157
+ static adc_oneshot_unit_handle_t shared_adc_handles[2];
158
+ #endif // USE_ESP32
159
+
93
160
  #ifdef USE_RP2040
94
161
  bool is_temperature_{false};
95
162
  #endif // USE_RP2040
96
163
 
97
- #ifdef USE_ESP32
98
- adc_atten_t attenuation_{ADC_ATTEN_DB_0};
99
- adc1_channel_t channel1_{ADC1_CHANNEL_MAX};
100
- adc2_channel_t channel2_{ADC2_CHANNEL_MAX};
101
- bool autorange_{false};
102
- esp_adc_cal_characteristics_t cal_characteristics_[SOC_ADC_ATTEN_NUM] = {};
103
- #endif // USE_ESP32
164
+ #ifdef USE_ZEPHYR
165
+ const struct adc_dt_spec *channel_ = nullptr;
166
+ #endif
104
167
  };
105
168
 
106
169
  } // namespace adc
@@ -18,15 +18,15 @@ const LogString *sampling_mode_to_str(SamplingMode mode) {
18
18
  return LOG_STR("unknown");
19
19
  }
20
20
 
21
- Aggregator::Aggregator(SamplingMode mode) {
21
+ template<typename T> Aggregator<T>::Aggregator(SamplingMode mode) {
22
22
  this->mode_ = mode;
23
23
  // set to max uint if mode is "min"
24
24
  if (mode == SamplingMode::MIN) {
25
- this->aggr_ = UINT32_MAX;
25
+ this->aggr_ = std::numeric_limits<T>::max();
26
26
  }
27
27
  }
28
28
 
29
- void Aggregator::add_sample(uint32_t value) {
29
+ template<typename T> void Aggregator<T>::add_sample(T value) {
30
30
  this->samples_ += 1;
31
31
 
32
32
  switch (this->mode_) {
@@ -47,7 +47,7 @@ void Aggregator::add_sample(uint32_t value) {
47
47
  }
48
48
  }
49
49
 
50
- uint32_t Aggregator::aggregate() {
50
+ template<typename T> T Aggregator<T>::aggregate() {
51
51
  if (this->mode_ == SamplingMode::AVG) {
52
52
  if (this->samples_ == 0) {
53
53
  return this->aggr_;
@@ -59,6 +59,12 @@ uint32_t Aggregator::aggregate() {
59
59
  return this->aggr_;
60
60
  }
61
61
 
62
+ #ifdef USE_ZEPHYR
63
+ template class Aggregator<int32_t>;
64
+ #else
65
+ template class Aggregator<uint32_t>;
66
+ #endif
67
+
62
68
  void ADCSensor::update() {
63
69
  float value_v = this->sample();
64
70
  ESP_LOGV(TAG, "'%s': Voltage=%.4fV", this->get_name().c_str(), value_v);