esphome 2025.6.3__py3-none-any.whl → 2025.7.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 (606) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +8 -2
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as5600/as5600.h +0 -1
  42. esphome/components/async_tcp/__init__.py +14 -5
  43. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  44. esphome/components/atm90e32/atm90e32.cpp +2 -1
  45. esphome/components/audio/audio_decoder.cpp +1 -1
  46. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  47. esphome/components/b_parasite/b_parasite.h +0 -1
  48. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  49. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  50. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  51. esphome/components/bh1750/bh1750.cpp +5 -5
  52. esphome/components/binary_sensor/__init__.py +82 -5
  53. esphome/components/binary_sensor/automation.h +19 -1
  54. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  55. esphome/components/binary_sensor/binary_sensor.h +11 -25
  56. esphome/components/binary_sensor/filter.cpp +29 -24
  57. esphome/components/binary_sensor/filter.h +20 -10
  58. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  61. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  62. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  63. esphome/components/ble_client/switch/ble_switch.h +0 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  66. esphome/components/ble_presence/ble_presence_device.h +0 -1
  67. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  68. esphome/components/ble_scanner/ble_scanner.h +0 -1
  69. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  72. esphome/components/bme680/sensor.py +1 -1
  73. esphome/components/bmp581/bmp581.h +0 -2
  74. esphome/components/button/__init__.py +5 -2
  75. esphome/components/camera/__init__.py +1 -0
  76. esphome/components/camera/camera.cpp +22 -0
  77. esphome/components/camera/camera.h +80 -0
  78. esphome/components/canbus/__init__.py +1 -0
  79. esphome/components/cap1188/cap1188.h +0 -1
  80. esphome/components/captive_portal/__init__.py +12 -2
  81. esphome/components/captive_portal/captive_portal.cpp +12 -2
  82. esphome/components/captive_portal/captive_portal.h +5 -2
  83. esphome/components/ccs811/ccs811.h +0 -2
  84. esphome/components/climate/__init__.py +5 -2
  85. esphome/components/cm1106/sensor.py +2 -2
  86. esphome/components/const/__init__.py +2 -0
  87. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  88. esphome/components/copy/button/copy_button.h +0 -1
  89. esphome/components/copy/cover/copy_cover.h +0 -1
  90. esphome/components/copy/fan/copy_fan.h +0 -1
  91. esphome/components/copy/lock/copy_lock.h +0 -1
  92. esphome/components/copy/number/copy_number.h +0 -1
  93. esphome/components/copy/select/copy_select.h +0 -1
  94. esphome/components/copy/sensor/copy_sensor.h +0 -1
  95. esphome/components/copy/switch/copy_switch.h +0 -1
  96. esphome/components/copy/text/copy_text.h +0 -1
  97. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  98. esphome/components/cover/__init__.py +5 -2
  99. esphome/components/cs5460a/cs5460a.h +0 -1
  100. esphome/components/datetime/__init__.py +4 -2
  101. esphome/components/debug/__init__.py +20 -0
  102. esphome/components/debug/debug_esp32.cpp +2 -0
  103. esphome/components/deep_sleep/__init__.py +43 -9
  104. esphome/components/demo/__init__.py +2 -2
  105. esphome/components/display/display.cpp +4 -3
  106. esphome/components/display/display.h +0 -2
  107. esphome/components/display/display_buffer.cpp +1 -1
  108. esphome/components/ds2484/__init__.py +1 -0
  109. esphome/components/ds2484/ds2484.cpp +209 -0
  110. esphome/components/ds2484/ds2484.h +43 -0
  111. esphome/components/ds2484/one_wire.py +37 -0
  112. esphome/components/duty_time/duty_time_sensor.h +0 -1
  113. esphome/components/ens160_base/ens160_base.h +0 -1
  114. esphome/components/es7210/es7210.h +0 -1
  115. esphome/components/es7243e/es7243e.h +0 -1
  116. esphome/components/es8156/es8156.h +0 -1
  117. esphome/components/es8311/es8311.h +0 -1
  118. esphome/components/es8388/es8388.h +0 -1
  119. esphome/components/esp32/__init__.py +103 -135
  120. esphome/components/esp32/core.cpp +0 -4
  121. esphome/components/esp32/gpio.h +1 -1
  122. esphome/components/esp32/helpers.cpp +69 -0
  123. esphome/components/esp32_ble/ble.cpp +5 -6
  124. esphome/components/esp32_ble/ble.h +29 -14
  125. esphome/components/esp32_ble/ble_event.h +6 -6
  126. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  127. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  128. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  129. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  131. esphome/components/esp32_camera/__init__.py +112 -98
  132. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  133. esphome/components/esp32_camera/esp32_camera.h +35 -30
  134. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  135. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  136. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  137. esphome/components/esp32_hall/sensor.py +2 -21
  138. esphome/components/esp32_hosted/__init__.py +101 -0
  139. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  140. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  141. esphome/components/esp32_rmt/__init__.py +0 -58
  142. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  143. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  144. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  145. esphome/components/esp32_touch/esp32_touch.h +174 -28
  146. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  147. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  148. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  149. esphome/components/esp8266/__init__.py +2 -0
  150. esphome/components/esp8266/gpio.cpp +10 -10
  151. esphome/components/esp8266/helpers.cpp +31 -0
  152. esphome/components/esphome/ota/__init__.py +1 -0
  153. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  154. esphome/components/ethernet/__init__.py +42 -23
  155. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  156. esphome/components/ethernet/ethernet_component.cpp +69 -29
  157. esphome/components/ethernet/ethernet_component.h +18 -10
  158. esphome/components/event/__init__.py +5 -2
  159. esphome/components/ezo/ezo.h +0 -1
  160. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  161. esphome/components/fan/__init__.py +5 -2
  162. esphome/components/feedback/feedback_cover.h +0 -1
  163. esphome/components/font/__init__.py +92 -82
  164. esphome/components/font/font.cpp +9 -2
  165. esphome/components/font/font.h +20 -5
  166. esphome/components/fs3000/fs3000.h +0 -1
  167. esphome/components/gcja5/gcja5.h +0 -1
  168. esphome/components/gl_r01_i2c/__init__.py +0 -0
  169. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  170. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  171. esphome/components/gl_r01_i2c/sensor.py +36 -0
  172. esphome/components/gp8403/gp8403.h +0 -1
  173. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  174. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  175. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  176. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  177. esphome/components/he60r/he60r.h +0 -1
  178. esphome/components/heatpumpir/climate.py +2 -1
  179. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  180. esphome/components/heatpumpir/heatpumpir.h +1 -0
  181. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  182. esphome/components/host/__init__.py +3 -1
  183. esphome/components/host/helpers.cpp +57 -0
  184. esphome/components/http_request/__init__.py +19 -1
  185. esphome/components/http_request/http_request.h +1 -1
  186. esphome/components/http_request/http_request_arduino.h +1 -0
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +421 -268
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +5 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +34 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +2 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +0 -4
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/usb_host/usb_host_client.cpp +10 -10
  477. esphome/components/usb_uart/cp210x.cpp +1 -1
  478. esphome/components/usb_uart/usb_uart.cpp +41 -44
  479. esphome/components/usb_uart/usb_uart.h +4 -3
  480. esphome/components/valve/__init__.py +5 -2
  481. esphome/components/vbus/vbus.h +0 -1
  482. esphome/components/veml3235/veml3235.h +0 -1
  483. esphome/components/veml7700/veml7700.h +0 -1
  484. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  485. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  486. esphome/components/watchdog/watchdog.cpp +0 -4
  487. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  488. esphome/components/web_server/__init__.py +34 -19
  489. esphome/components/web_server/ota/__init__.py +32 -0
  490. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  491. esphome/components/web_server/ota/ota_web_server.h +26 -0
  492. esphome/components/web_server/web_server.cpp +305 -427
  493. esphome/components/web_server/web_server.h +33 -23
  494. esphome/components/web_server/web_server_v1.cpp +4 -5
  495. esphome/components/web_server_base/__init__.py +5 -2
  496. esphome/components/web_server_base/web_server_base.cpp +2 -94
  497. esphome/components/web_server_base/web_server_base.h +5 -25
  498. esphome/components/web_server_idf/multipart.cpp +254 -0
  499. esphome/components/web_server_idf/multipart.h +86 -0
  500. esphome/components/web_server_idf/utils.cpp +32 -0
  501. esphome/components/web_server_idf/utils.h +10 -0
  502. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  503. esphome/components/web_server_idf/web_server_idf.h +11 -10
  504. esphome/components/wiegand/wiegand.cpp +2 -2
  505. esphome/components/wifi/__init__.py +18 -0
  506. esphome/components/wifi/wifi_component.cpp +17 -22
  507. esphome/components/wifi/wifi_component.h +27 -23
  508. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  509. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  510. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  511. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  512. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  513. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  514. esphome/components/wireguard/__init__.py +2 -11
  515. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  516. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  517. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  518. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  519. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  520. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  521. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  522. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  523. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  524. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  525. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  526. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  527. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  528. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  529. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  530. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  531. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  532. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  533. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  534. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  535. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  536. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  537. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  538. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  539. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  540. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  541. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  542. esphome/components/zyaura/zyaura.h +0 -1
  543. esphome/config.py +88 -22
  544. esphome/config_helpers.py +74 -1
  545. esphome/config_validation.py +12 -1
  546. esphome/const.py +65 -10
  547. esphome/core/__init__.py +18 -2
  548. esphome/core/application.cpp +163 -10
  549. esphome/core/application.h +145 -165
  550. esphome/core/area.h +19 -0
  551. esphome/core/automation.h +58 -9
  552. esphome/core/color.cpp +3 -5
  553. esphome/core/color.h +16 -16
  554. esphome/core/component.cpp +151 -18
  555. esphome/core/component.h +98 -4
  556. esphome/core/component_iterator.cpp +11 -9
  557. esphome/core/component_iterator.h +12 -10
  558. esphome/core/config.py +155 -6
  559. esphome/core/controller.cpp +4 -2
  560. esphome/core/controller.h +1 -1
  561. esphome/core/datatypes.h +2 -2
  562. esphome/core/defines.h +17 -2
  563. esphome/core/device.h +20 -0
  564. esphome/core/entity_base.cpp +20 -15
  565. esphome/core/entity_base.h +76 -0
  566. esphome/core/entity_helpers.py +168 -1
  567. esphome/core/event_pool.h +81 -0
  568. esphome/core/helpers.cpp +75 -230
  569. esphome/core/helpers.h +164 -104
  570. esphome/core/lock_free_queue.h +151 -0
  571. esphome/core/log.cpp +2 -2
  572. esphome/core/log.h +2 -0
  573. esphome/core/optional.h +5 -0
  574. esphome/core/ring_buffer.cpp +2 -2
  575. esphome/core/scheduler.cpp +275 -103
  576. esphome/core/scheduler.h +154 -17
  577. esphome/core/time.cpp +5 -5
  578. esphome/core/time.h +5 -5
  579. esphome/cpp_generator.py +17 -0
  580. esphome/cpp_helpers.py +0 -22
  581. esphome/cpp_types.py +3 -1
  582. esphome/dashboard/entries.py +1 -1
  583. esphome/dashboard/util/text.py +5 -21
  584. esphome/dashboard/web_server.py +9 -1
  585. esphome/helpers.py +47 -0
  586. esphome/loader.py +15 -1
  587. esphome/pins.py +14 -8
  588. esphome/wizard.py +17 -4
  589. esphome/writer.py +21 -3
  590. esphome/yaml_util.py +0 -2
  591. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/METADATA +10 -9
  592. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/RECORD +597 -538
  593. esphome/components/api/api_pb2_size.h +0 -361
  594. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  595. esphome/components/esp32_ble/queue.h +0 -85
  596. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  597. esphome/components/esp32_hall/esp32_hall.h +0 -23
  598. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  599. esphome/components/ld2410/button/reset_button.cpp +0 -9
  600. esphome/components/ld2450/button/reset_button.cpp +0 -9
  601. esphome/components/openthread/tlv.py +0 -65
  602. /esphome/{dashboard/enum.py → enum.py} +0 -0
  603. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/WHEEL +0 -0
  604. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/entry_points.txt +0 -0
  605. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/licenses/LICENSE +0 -0
  606. {esphome-2025.6.3.dist-info → esphome-2025.7.0b2.dist-info}/top_level.txt +0 -0
@@ -2,22 +2,23 @@
2
2
 
3
3
  #ifdef USE_ESP32
4
4
 
5
- #include "esphome/core/automation.h"
6
- #include "esphome/core/component.h"
7
- #include "esphome/core/entity_base.h"
8
- #include "esphome/core/helpers.h"
9
5
  #include <esp_camera.h>
10
6
  #include <freertos/FreeRTOS.h>
11
7
  #include <freertos/queue.h>
8
+ #include "esphome/core/automation.h"
9
+ #include "esphome/core/component.h"
10
+ #include "esphome/components/camera/camera.h"
11
+ #include "esphome/core/helpers.h"
12
+
13
+ #ifdef USE_I2C
14
+ #include "esphome/components/i2c/i2c_bus.h"
15
+ #endif // USE_I2C
12
16
 
13
17
  namespace esphome {
14
18
  namespace esp32_camera {
15
19
 
16
20
  class ESP32Camera;
17
21
 
18
- /* ---------------- enum classes ---------------- */
19
- enum CameraRequester { IDLE, API_REQUESTER, WEB_REQUESTER };
20
-
21
22
  enum ESP32CameraFrameSize {
22
23
  ESP32_CAMERA_SIZE_160X120, // QQVGA
23
24
  ESP32_CAMERA_SIZE_176X144, // QCIF
@@ -73,13 +74,13 @@ enum ESP32SpecialEffect {
73
74
  };
74
75
 
75
76
  /* ---------------- CameraImage class ---------------- */
76
- class CameraImage {
77
+ class ESP32CameraImage : public camera::CameraImage {
77
78
  public:
78
- CameraImage(camera_fb_t *buffer, uint8_t requester);
79
+ ESP32CameraImage(camera_fb_t *buffer, uint8_t requester);
79
80
  camera_fb_t *get_raw_buffer();
80
- uint8_t *get_data_buffer();
81
- size_t get_data_length();
82
- bool was_requested_by(CameraRequester requester) const;
81
+ uint8_t *get_data_buffer() override;
82
+ size_t get_data_length() override;
83
+ bool was_requested_by(camera::CameraRequester requester) const override;
83
84
 
84
85
  protected:
85
86
  camera_fb_t *buffer_;
@@ -92,21 +93,21 @@ struct CameraImageData {
92
93
  };
93
94
 
94
95
  /* ---------------- CameraImageReader class ---------------- */
95
- class CameraImageReader {
96
+ class ESP32CameraImageReader : public camera::CameraImageReader {
96
97
  public:
97
- void set_image(std::shared_ptr<CameraImage> image);
98
- size_t available() const;
99
- uint8_t *peek_data_buffer();
100
- void consume_data(size_t consumed);
101
- void return_image();
98
+ void set_image(std::shared_ptr<camera::CameraImage> image) override;
99
+ size_t available() const override;
100
+ uint8_t *peek_data_buffer() override;
101
+ void consume_data(size_t consumed) override;
102
+ void return_image() override;
102
103
 
103
104
  protected:
104
- std::shared_ptr<CameraImage> image_;
105
+ std::shared_ptr<ESP32CameraImage> image_;
105
106
  size_t offset_{0};
106
107
  };
107
108
 
108
109
  /* ---------------- ESP32Camera class ---------------- */
109
- class ESP32Camera : public EntityBase, public Component {
110
+ class ESP32Camera : public camera::Camera {
110
111
  public:
111
112
  ESP32Camera();
112
113
 
@@ -118,6 +119,9 @@ class ESP32Camera : public EntityBase, public Component {
118
119
  void set_pixel_clock_pin(uint8_t pin);
119
120
  void set_external_clock(uint8_t pin, uint32_t frequency);
120
121
  void set_i2c_pins(uint8_t sda, uint8_t scl);
122
+ #ifdef USE_I2C
123
+ void set_i2c_id(i2c::InternalI2CBus *i2c_bus);
124
+ #endif // USE_I2C
121
125
  void set_reset_pin(uint8_t pin);
122
126
  void set_power_down_pin(uint8_t pin);
123
127
  /* -- image */
@@ -155,14 +159,15 @@ class ESP32Camera : public EntityBase, public Component {
155
159
  void dump_config() override;
156
160
  float get_setup_priority() const override;
157
161
  /* public API (specific) */
158
- void start_stream(CameraRequester requester);
159
- void stop_stream(CameraRequester requester);
160
- void request_image(CameraRequester requester);
162
+ void start_stream(camera::CameraRequester requester) override;
163
+ void stop_stream(camera::CameraRequester requester) override;
164
+ void request_image(camera::CameraRequester requester) override;
161
165
  void update_camera_parameters();
162
166
 
163
- void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback);
167
+ void add_image_callback(std::function<void(std::shared_ptr<camera::CameraImage>)> &&callback) override;
164
168
  void add_stream_start_callback(std::function<void()> &&callback);
165
169
  void add_stream_stop_callback(std::function<void()> &&callback);
170
+ camera::CameraImageReader *create_image_reader() override;
166
171
 
167
172
  protected:
168
173
  /* internal methods */
@@ -199,26 +204,26 @@ class ESP32Camera : public EntityBase, public Component {
199
204
  uint32_t idle_update_interval_{15000};
200
205
 
201
206
  esp_err_t init_error_{ESP_OK};
202
- std::shared_ptr<CameraImage> current_image_;
207
+ std::shared_ptr<ESP32CameraImage> current_image_;
203
208
  uint8_t single_requesters_{0};
204
209
  uint8_t stream_requesters_{0};
205
210
  QueueHandle_t framebuffer_get_queue_;
206
211
  QueueHandle_t framebuffer_return_queue_;
207
- CallbackManager<void(std::shared_ptr<CameraImage>)> new_image_callback_{};
212
+ CallbackManager<void(std::shared_ptr<camera::CameraImage>)> new_image_callback_{};
208
213
  CallbackManager<void()> stream_start_callback_{};
209
214
  CallbackManager<void()> stream_stop_callback_{};
210
215
 
211
216
  uint32_t last_idle_request_{0};
212
217
  uint32_t last_update_{0};
218
+ #ifdef USE_I2C
219
+ i2c::InternalI2CBus *i2c_bus_{nullptr};
220
+ #endif // USE_I2C
213
221
  };
214
222
 
215
- // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
216
- extern ESP32Camera *global_esp32_camera;
217
-
218
223
  class ESP32CameraImageTrigger : public Trigger<CameraImageData> {
219
224
  public:
220
225
  explicit ESP32CameraImageTrigger(ESP32Camera *parent) {
221
- parent->add_image_callback([this](const std::shared_ptr<esp32_camera::CameraImage> &image) {
226
+ parent->add_image_callback([this](const std::shared_ptr<camera::CameraImage> &image) {
222
227
  CameraImageData camera_image_data{};
223
228
  camera_image_data.length = image->get_data_length();
224
229
  camera_image_data.data = image->get_data_buffer();
@@ -3,7 +3,8 @@ import esphome.config_validation as cv
3
3
  from esphome.const import CONF_ID, CONF_MODE, CONF_PORT
4
4
 
5
5
  CODEOWNERS = ["@ayufan"]
6
- DEPENDENCIES = ["esp32_camera"]
6
+ AUTO_LOAD = ["camera"]
7
+ DEPENDENCIES = ["network"]
7
8
  MULTI_CONF = True
8
9
 
9
10
  esp32_camera_web_server_ns = cg.esphome_ns.namespace("esp32_camera_web_server")
@@ -40,7 +40,7 @@ CameraWebServer::CameraWebServer() {}
40
40
  CameraWebServer::~CameraWebServer() {}
41
41
 
42
42
  void CameraWebServer::setup() {
43
- if (!esp32_camera::global_esp32_camera || esp32_camera::global_esp32_camera->is_failed()) {
43
+ if (!camera::Camera::instance() || camera::Camera::instance()->is_failed()) {
44
44
  this->mark_failed();
45
45
  return;
46
46
  }
@@ -67,8 +67,8 @@ void CameraWebServer::setup() {
67
67
 
68
68
  httpd_register_uri_handler(this->httpd_, &uri);
69
69
 
70
- esp32_camera::global_esp32_camera->add_image_callback([this](std::shared_ptr<esp32_camera::CameraImage> image) {
71
- if (this->running_ && image->was_requested_by(esp32_camera::WEB_REQUESTER)) {
70
+ camera::Camera::instance()->add_image_callback([this](std::shared_ptr<camera::CameraImage> image) {
71
+ if (this->running_ && image->was_requested_by(camera::WEB_REQUESTER)) {
72
72
  this->image_ = std::move(image);
73
73
  xSemaphoreGive(this->semaphore_);
74
74
  }
@@ -108,8 +108,8 @@ void CameraWebServer::loop() {
108
108
  }
109
109
  }
110
110
 
111
- std::shared_ptr<esphome::esp32_camera::CameraImage> CameraWebServer::wait_for_image_() {
112
- std::shared_ptr<esphome::esp32_camera::CameraImage> image;
111
+ std::shared_ptr<esphome::camera::CameraImage> CameraWebServer::wait_for_image_() {
112
+ std::shared_ptr<esphome::camera::CameraImage> image;
113
113
  image.swap(this->image_);
114
114
 
115
115
  if (!image) {
@@ -172,7 +172,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
172
172
  uint32_t last_frame = millis();
173
173
  uint32_t frames = 0;
174
174
 
175
- esp32_camera::global_esp32_camera->start_stream(esphome::esp32_camera::WEB_REQUESTER);
175
+ camera::Camera::instance()->start_stream(esphome::camera::WEB_REQUESTER);
176
176
 
177
177
  while (res == ESP_OK && this->running_) {
178
178
  auto image = this->wait_for_image_();
@@ -205,7 +205,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
205
205
  res = httpd_send_all(req, STREAM_ERROR, strlen(STREAM_ERROR));
206
206
  }
207
207
 
208
- esp32_camera::global_esp32_camera->stop_stream(esphome::esp32_camera::WEB_REQUESTER);
208
+ camera::Camera::instance()->stop_stream(esphome::camera::WEB_REQUESTER);
209
209
 
210
210
  ESP_LOGI(TAG, "STREAM: closed. Frames: %" PRIu32, frames);
211
211
 
@@ -215,7 +215,7 @@ esp_err_t CameraWebServer::streaming_handler_(struct httpd_req *req) {
215
215
  esp_err_t CameraWebServer::snapshot_handler_(struct httpd_req *req) {
216
216
  esp_err_t res = ESP_OK;
217
217
 
218
- esp32_camera::global_esp32_camera->request_image(esphome::esp32_camera::WEB_REQUESTER);
218
+ camera::Camera::instance()->request_image(esphome::camera::WEB_REQUESTER);
219
219
 
220
220
  auto image = this->wait_for_image_();
221
221
 
@@ -6,7 +6,7 @@
6
6
  #include <freertos/FreeRTOS.h>
7
7
  #include <freertos/semphr.h>
8
8
 
9
- #include "esphome/components/esp32_camera/esp32_camera.h"
9
+ #include "esphome/components/camera/camera.h"
10
10
  #include "esphome/core/component.h"
11
11
  #include "esphome/core/helpers.h"
12
12
  #include "esphome/core/preferences.h"
@@ -32,7 +32,7 @@ class CameraWebServer : public Component {
32
32
  void loop() override;
33
33
 
34
34
  protected:
35
- std::shared_ptr<esphome::esp32_camera::CameraImage> wait_for_image_();
35
+ std::shared_ptr<camera::CameraImage> wait_for_image_();
36
36
  esp_err_t handler_(struct httpd_req *req);
37
37
  esp_err_t streaming_handler_(struct httpd_req *req);
38
38
  esp_err_t snapshot_handler_(struct httpd_req *req);
@@ -40,7 +40,7 @@ class CameraWebServer : public Component {
40
40
  uint16_t port_{0};
41
41
  void *httpd_{nullptr};
42
42
  SemaphoreHandle_t semaphore_;
43
- std::shared_ptr<esphome::esp32_camera::CameraImage> image_;
43
+ std::shared_ptr<camera::CameraImage> image_;
44
44
  bool running_{false};
45
45
  Mode mode_{STREAM};
46
46
  };
@@ -1,24 +1,5 @@
1
- import esphome.codegen as cg
2
- from esphome.components import sensor
3
1
  import esphome.config_validation as cv
4
- from esphome.const import ICON_MAGNET, STATE_CLASS_MEASUREMENT, UNIT_MICROTESLA
5
2
 
6
- DEPENDENCIES = ["esp32"]
7
-
8
- esp32_hall_ns = cg.esphome_ns.namespace("esp32_hall")
9
- ESP32HallSensor = esp32_hall_ns.class_(
10
- "ESP32HallSensor", sensor.Sensor, cg.PollingComponent
3
+ CONFIG_SCHEMA = cv.invalid(
4
+ "The esp32_hall component has been removed as of ESPHome 2025.7.0. See https://github.com/esphome/esphome/pull/9117 for details."
11
5
  )
12
-
13
- CONFIG_SCHEMA = sensor.sensor_schema(
14
- ESP32HallSensor,
15
- unit_of_measurement=UNIT_MICROTESLA,
16
- icon=ICON_MAGNET,
17
- accuracy_decimals=1,
18
- state_class=STATE_CLASS_MEASUREMENT,
19
- ).extend(cv.polling_component_schema("60s"))
20
-
21
-
22
- async def to_code(config):
23
- var = await sensor.new_sensor(config)
24
- await cg.register_component(var, config)
@@ -0,0 +1,101 @@
1
+ import os
2
+
3
+ from esphome import pins
4
+ from esphome.components import esp32
5
+ import esphome.config_validation as cv
6
+ from esphome.const import (
7
+ CONF_CLK_PIN,
8
+ CONF_RESET_PIN,
9
+ CONF_VARIANT,
10
+ KEY_CORE,
11
+ KEY_FRAMEWORK_VERSION,
12
+ )
13
+ from esphome.core import CORE
14
+
15
+ CODEOWNERS = ["@swoboda1337"]
16
+
17
+ CONF_ACTIVE_HIGH = "active_high"
18
+ CONF_CMD_PIN = "cmd_pin"
19
+ CONF_D0_PIN = "d0_pin"
20
+ CONF_D1_PIN = "d1_pin"
21
+ CONF_D2_PIN = "d2_pin"
22
+ CONF_D3_PIN = "d3_pin"
23
+ CONF_SLOT = "slot"
24
+
25
+ CONFIG_SCHEMA = cv.All(
26
+ cv.Schema(
27
+ {
28
+ cv.Required(CONF_VARIANT): cv.one_of(*esp32.VARIANTS, upper=True),
29
+ cv.Required(CONF_ACTIVE_HIGH): cv.boolean,
30
+ cv.Required(CONF_CLK_PIN): pins.internal_gpio_output_pin_number,
31
+ cv.Required(CONF_CMD_PIN): pins.internal_gpio_output_pin_number,
32
+ cv.Required(CONF_D0_PIN): pins.internal_gpio_output_pin_number,
33
+ cv.Required(CONF_D1_PIN): pins.internal_gpio_output_pin_number,
34
+ cv.Required(CONF_D2_PIN): pins.internal_gpio_output_pin_number,
35
+ cv.Required(CONF_D3_PIN): pins.internal_gpio_output_pin_number,
36
+ cv.Required(CONF_RESET_PIN): pins.internal_gpio_output_pin_number,
37
+ cv.Optional(CONF_SLOT, default=1): cv.int_range(min=0, max=1),
38
+ }
39
+ ),
40
+ )
41
+
42
+
43
+ async def to_code(config):
44
+ if config[CONF_ACTIVE_HIGH]:
45
+ esp32.add_idf_sdkconfig_option(
46
+ "CONFIG_ESP_HOSTED_SDIO_RESET_ACTIVE_HIGH",
47
+ True,
48
+ )
49
+ else:
50
+ esp32.add_idf_sdkconfig_option(
51
+ "CONFIG_ESP_HOSTED_SDIO_RESET_ACTIVE_LOW",
52
+ True,
53
+ )
54
+ esp32.add_idf_sdkconfig_option(
55
+ "CONFIG_ESP_HOSTED_SDIO_GPIO_RESET_SLAVE", # NOLINT
56
+ config[CONF_RESET_PIN],
57
+ )
58
+ esp32.add_idf_sdkconfig_option(
59
+ f"CONFIG_SLAVE_IDF_TARGET_{config[CONF_VARIANT]}", # NOLINT
60
+ True,
61
+ )
62
+ esp32.add_idf_sdkconfig_option(
63
+ f"CONFIG_ESP_HOSTED_SDIO_SLOT_{config[CONF_SLOT]}",
64
+ True,
65
+ )
66
+ esp32.add_idf_sdkconfig_option(
67
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_{config[CONF_SLOT]}",
68
+ config[CONF_CLK_PIN],
69
+ )
70
+ esp32.add_idf_sdkconfig_option(
71
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_{config[CONF_SLOT]}",
72
+ config[CONF_CMD_PIN],
73
+ )
74
+ esp32.add_idf_sdkconfig_option(
75
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_{config[CONF_SLOT]}",
76
+ config[CONF_D0_PIN],
77
+ )
78
+ esp32.add_idf_sdkconfig_option(
79
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
80
+ config[CONF_D1_PIN],
81
+ )
82
+ esp32.add_idf_sdkconfig_option(
83
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D2_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
84
+ config[CONF_D2_PIN],
85
+ )
86
+ esp32.add_idf_sdkconfig_option(
87
+ f"CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D3_4BIT_BUS_SLOT_{config[CONF_SLOT]}",
88
+ config[CONF_D3_PIN],
89
+ )
90
+ esp32.add_idf_sdkconfig_option("CONFIG_ESP_HOSTED_CUSTOM_SDIO_PINS", True)
91
+
92
+ framework_ver: cv.Version = CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]
93
+ os.environ["ESP_IDF_VERSION"] = f"{framework_ver.major}.{framework_ver.minor}"
94
+ esp32.add_idf_component(name="espressif/esp_wifi_remote", ref="0.10.2")
95
+ esp32.add_idf_component(name="espressif/eppp_link", ref="0.2.0")
96
+ esp32.add_idf_component(name="espressif/esp_hosted", ref="2.0.11")
97
+ esp32.add_extra_script(
98
+ "post",
99
+ "esp32_hosted.py",
100
+ os.path.join(os.path.dirname(__file__), "esp32_hosted.py.script"),
101
+ )
@@ -0,0 +1,12 @@
1
+ # pylint: disable=E0602
2
+ Import("env") # noqa
3
+
4
+ # Workaround whole archive issue
5
+ if "__LIB_DEPS" in env and "libespressif__esp_hosted.a" in env["__LIB_DEPS"]:
6
+ env.Append(
7
+ LINKFLAGS=[
8
+ "-Wl,--whole-archive",
9
+ env["BUILD_DIR"] + "/esp-idf/espressif__esp_hosted/libespressif__esp_hosted.a",
10
+ "-Wl,--no-whole-archive",
11
+ ]
12
+ )
@@ -168,6 +168,8 @@ void ESP32ImprovComponent::loop() {
168
168
  case improv::STATE_PROVISIONED: {
169
169
  this->incoming_data_.clear();
170
170
  this->set_status_indicator_state_(false);
171
+ // Provisioning complete, no further loop execution needed
172
+ this->disable_loop();
171
173
  break;
172
174
  }
173
175
  }
@@ -254,6 +256,7 @@ void ESP32ImprovComponent::start() {
254
256
 
255
257
  ESP_LOGD(TAG, "Setting Improv to start");
256
258
  this->should_start_ = true;
259
+ this->enable_loop();
257
260
  }
258
261
 
259
262
  void ESP32ImprovComponent::stop() {
@@ -1,48 +1,8 @@
1
- import esphome.codegen as cg
2
1
  from esphome.components import esp32
3
2
  import esphome.config_validation as cv
4
- from esphome.const import KEY_CORE, KEY_FRAMEWORK_VERSION
5
- from esphome.core import CORE
6
3
 
7
4
  CODEOWNERS = ["@jesserockz"]
8
5
 
9
- RMT_TX_CHANNELS = {
10
- esp32.const.VARIANT_ESP32: [0, 1, 2, 3, 4, 5, 6, 7],
11
- esp32.const.VARIANT_ESP32S2: [0, 1, 2, 3],
12
- esp32.const.VARIANT_ESP32S3: [0, 1, 2, 3],
13
- esp32.const.VARIANT_ESP32C3: [0, 1],
14
- esp32.const.VARIANT_ESP32C6: [0, 1],
15
- esp32.const.VARIANT_ESP32H2: [0, 1],
16
- }
17
-
18
- RMT_RX_CHANNELS = {
19
- esp32.const.VARIANT_ESP32: [0, 1, 2, 3, 4, 5, 6, 7],
20
- esp32.const.VARIANT_ESP32S2: [0, 1, 2, 3],
21
- esp32.const.VARIANT_ESP32S3: [4, 5, 6, 7],
22
- esp32.const.VARIANT_ESP32C3: [2, 3],
23
- esp32.const.VARIANT_ESP32C6: [2, 3],
24
- esp32.const.VARIANT_ESP32H2: [2, 3],
25
- }
26
-
27
- rmt_channel_t = cg.global_ns.enum("rmt_channel_t")
28
- RMT_CHANNEL_ENUMS = {
29
- 0: rmt_channel_t.RMT_CHANNEL_0,
30
- 1: rmt_channel_t.RMT_CHANNEL_1,
31
- 2: rmt_channel_t.RMT_CHANNEL_2,
32
- 3: rmt_channel_t.RMT_CHANNEL_3,
33
- 4: rmt_channel_t.RMT_CHANNEL_4,
34
- 5: rmt_channel_t.RMT_CHANNEL_5,
35
- 6: rmt_channel_t.RMT_CHANNEL_6,
36
- 7: rmt_channel_t.RMT_CHANNEL_7,
37
- }
38
-
39
-
40
- def use_new_rmt_driver():
41
- framework_version = CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION]
42
- if CORE.using_esp_idf and framework_version >= cv.Version(5, 0, 0):
43
- return True
44
- return False
45
-
46
6
 
47
7
  def validate_clock_resolution():
48
8
  def _validator(value):
@@ -60,21 +20,3 @@ def validate_clock_resolution():
60
20
  return value
61
21
 
62
22
  return _validator
63
-
64
-
65
- def validate_rmt_channel(*, tx: bool):
66
- rmt_channels = RMT_TX_CHANNELS if tx else RMT_RX_CHANNELS
67
-
68
- def _validator(value):
69
- cv.only_on_esp32(value)
70
- value = cv.int_(value)
71
- variant = esp32.get_esp32_variant()
72
- if variant not in rmt_channels:
73
- raise cv.Invalid(f"ESP32 variant {variant} does not support RMT.")
74
- if value not in rmt_channels[variant]:
75
- raise cv.Invalid(
76
- f"RMT channel {value} does not support {'transmitting' if tx else 'receiving'} for ESP32 variant {variant}."
77
- )
78
- return cv.enum(RMT_CHANNEL_ENUMS)(value)
79
-
80
- return _validator