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
@@ -0,0 +1,80 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/automation.h"
4
+ #include "esphome/core/component.h"
5
+ #include "esphome/core/entity_base.h"
6
+ #include "esphome/core/helpers.h"
7
+
8
+ namespace esphome {
9
+ namespace camera {
10
+
11
+ /** Different sources for filtering.
12
+ * IDLE: Camera requests to send an image to the API.
13
+ * API_REQUESTER: API requests a new image.
14
+ * WEB_REQUESTER: ESP32 web server request an image. Ignored by API.
15
+ */
16
+ enum CameraRequester : uint8_t { IDLE, API_REQUESTER, WEB_REQUESTER };
17
+
18
+ /** Abstract camera image base class.
19
+ * Encapsulates the JPEG encoded data and it is shared among
20
+ * all connected clients.
21
+ */
22
+ class CameraImage {
23
+ public:
24
+ virtual uint8_t *get_data_buffer() = 0;
25
+ virtual size_t get_data_length() = 0;
26
+ virtual bool was_requested_by(CameraRequester requester) const = 0;
27
+ virtual ~CameraImage() {}
28
+ };
29
+
30
+ /** Abstract image reader base class.
31
+ * Keeps track of the data offset of the camera image and
32
+ * how many bytes are remaining to read. When the image
33
+ * is returned, the shared_ptr is reset and the camera can
34
+ * reuse the memory of the camera image.
35
+ */
36
+ class CameraImageReader {
37
+ public:
38
+ virtual void set_image(std::shared_ptr<CameraImage> image) = 0;
39
+ virtual size_t available() const = 0;
40
+ virtual uint8_t *peek_data_buffer() = 0;
41
+ virtual void consume_data(size_t consumed) = 0;
42
+ virtual void return_image() = 0;
43
+ virtual ~CameraImageReader() {}
44
+ };
45
+
46
+ /** Abstract camera base class. Collaborates with API.
47
+ * 1) API server starts and installs callback (add_image_callback)
48
+ * which is called by the camera when a new image is available.
49
+ * 2) New API client connects and creates a new image reader (create_image_reader).
50
+ * 3) API connection receives protobuf CameraImageRequest and calls request_image.
51
+ * 3.a) API connection receives protobuf CameraImageRequest and calls start_stream.
52
+ * 4) Camera implementation provides JPEG data in the CameraImage and calls callback.
53
+ * 5) API connection sets the image in the image reader.
54
+ * 6) API connection consumes data from the image reader and returns the image when finished.
55
+ * 7.a) Camera captures a new image and continues with 4) until start_stream is called.
56
+ */
57
+ class Camera : public EntityBase, public Component {
58
+ public:
59
+ Camera();
60
+ // Camera implementation invokes callback to publish a new image.
61
+ virtual void add_image_callback(std::function<void(std::shared_ptr<CameraImage>)> &&callback) = 0;
62
+ /// Returns a new camera image reader that keeps track of the JPEG data in the camera image.
63
+ virtual CameraImageReader *create_image_reader() = 0;
64
+ // Connection, camera or web server requests one new JPEG image.
65
+ virtual void request_image(CameraRequester requester) = 0;
66
+ // Connection, camera or web server requests a stream of images.
67
+ virtual void start_stream(CameraRequester requester) = 0;
68
+ // Connection or web server stops the previously started stream.
69
+ virtual void stop_stream(CameraRequester requester) = 0;
70
+ virtual ~Camera() {}
71
+ /// The singleton instance of the camera implementation.
72
+ static Camera *instance();
73
+
74
+ protected:
75
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
76
+ static Camera *global_camera;
77
+ };
78
+
79
+ } // namespace camera
80
+ } // namespace esphome
@@ -1,4 +1,5 @@
1
1
  import re
2
+
2
3
  from esphome import automation
3
4
  import esphome.codegen as cg
4
5
  import esphome.config_validation as cv
@@ -46,7 +46,6 @@ class CAP1188Component : public Component, public i2c::I2CDevice {
46
46
  void set_reset_pin(GPIOPin *reset_pin) { this->reset_pin_ = reset_pin; }
47
47
  void setup() override;
48
48
  void dump_config() override;
49
- float get_setup_priority() const override { return setup_priority::DATA; }
50
49
  void loop() override;
51
50
 
52
51
  protected:
@@ -7,11 +7,12 @@ from esphome.const import (
7
7
  PLATFORM_BK72XX,
8
8
  PLATFORM_ESP32,
9
9
  PLATFORM_ESP8266,
10
+ PLATFORM_LN882X,
10
11
  PLATFORM_RTL87XX,
11
12
  )
12
13
  from esphome.core import CORE, coroutine_with_priority
13
14
 
14
- AUTO_LOAD = ["web_server_base"]
15
+ AUTO_LOAD = ["web_server_base", "ota.web_server"]
15
16
  DEPENDENCIES = ["wifi"]
16
17
  CODEOWNERS = ["@OttoWinter"]
17
18
 
@@ -27,7 +28,15 @@ CONFIG_SCHEMA = cv.All(
27
28
  ),
28
29
  }
29
30
  ).extend(cv.COMPONENT_SCHEMA),
30
- cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266, PLATFORM_BK72XX, PLATFORM_RTL87XX]),
31
+ cv.only_on(
32
+ [
33
+ PLATFORM_ESP32,
34
+ PLATFORM_ESP8266,
35
+ PLATFORM_BK72XX,
36
+ PLATFORM_LN882X,
37
+ PLATFORM_RTL87XX,
38
+ ]
39
+ ),
31
40
  )
32
41
 
33
42
 
@@ -41,6 +50,7 @@ async def to_code(config):
41
50
 
42
51
  if CORE.using_arduino:
43
52
  if CORE.is_esp32:
53
+ cg.add_library("ESP32 Async UDP", None)
44
54
  cg.add_library("DNSServer", None)
45
55
  cg.add_library("WiFi", None)
46
56
  if CORE.is_esp8266:
@@ -37,12 +37,16 @@ void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) {
37
37
  request->redirect("/?save");
38
38
  }
39
39
 
40
- void CaptivePortal::setup() {}
40
+ void CaptivePortal::setup() {
41
+ #ifndef USE_ARDUINO
42
+ // No DNS server needed for non-Arduino frameworks
43
+ this->disable_loop();
44
+ #endif
45
+ }
41
46
  void CaptivePortal::start() {
42
47
  this->base_->init();
43
48
  if (!this->initialized_) {
44
49
  this->base_->add_handler(this);
45
- this->base_->add_ota_handler();
46
50
  }
47
51
 
48
52
  #ifdef USE_ARDUINO
@@ -50,6 +54,8 @@ void CaptivePortal::start() {
50
54
  this->dns_server_->setErrorReplyCode(DNSReplyCode::NoError);
51
55
  network::IPAddress ip = wifi::global_wifi_component->wifi_soft_ap_ip();
52
56
  this->dns_server_->start(53, "*", ip);
57
+ // Re-enable loop() when DNS server is started
58
+ this->enable_loop();
53
59
  #endif
54
60
 
55
61
  this->base_->get_server()->onNotFound([this](AsyncWebServerRequest *req) {
@@ -68,7 +74,11 @@ void CaptivePortal::start() {
68
74
 
69
75
  void CaptivePortal::handleRequest(AsyncWebServerRequest *req) {
70
76
  if (req->url() == "/") {
77
+ #ifndef USE_ESP8266
78
+ auto *response = req->beginResponse(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
79
+ #else
71
80
  auto *response = req->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
81
+ #endif
72
82
  response->addHeader("Content-Encoding", "gzip");
73
83
  req->send(response);
74
84
  return;
@@ -21,8 +21,11 @@ class CaptivePortal : public AsyncWebHandler, public Component {
21
21
  void dump_config() override;
22
22
  #ifdef USE_ARDUINO
23
23
  void loop() override {
24
- if (this->dns_server_ != nullptr)
24
+ if (this->dns_server_ != nullptr) {
25
25
  this->dns_server_->processNextRequest();
26
+ } else {
27
+ this->disable_loop();
28
+ }
26
29
  }
27
30
  #endif
28
31
  float get_setup_priority() const override;
@@ -37,7 +40,7 @@ class CaptivePortal : public AsyncWebHandler, public Component {
37
40
  #endif
38
41
  }
39
42
 
40
- bool canHandle(AsyncWebServerRequest *request) override {
43
+ bool canHandle(AsyncWebServerRequest *request) const override {
41
44
  if (!this->active_)
42
45
  return false;
43
46
 
@@ -25,8 +25,6 @@ class CCS811Component : public PollingComponent, public i2c::I2CDevice {
25
25
 
26
26
  void dump_config() override;
27
27
 
28
- float get_setup_priority() const override { return setup_priority::DATA; }
29
-
30
28
  protected:
31
29
  optional<uint8_t> read_status_() { return this->read_byte(0x00); }
32
30
  bool status_has_error_() { return this->read_status_().value_or(1) & 1; }
@@ -48,8 +48,8 @@ from esphome.const import (
48
48
  CONF_WEB_SERVER,
49
49
  )
50
50
  from esphome.core import CORE, coroutine_with_priority
51
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
51
52
  from esphome.cpp_generator import MockObjClass
52
- from esphome.cpp_helpers import setup_entity
53
53
 
54
54
  IS_PLATFORM_COMPONENT = True
55
55
 
@@ -247,6 +247,9 @@ _CLIMATE_SCHEMA = (
247
247
  )
248
248
 
249
249
 
250
+ _CLIMATE_SCHEMA.add_extra(entity_duplicate_validator("climate"))
251
+
252
+
250
253
  def climate_schema(
251
254
  class_: MockObjClass,
252
255
  *,
@@ -273,7 +276,7 @@ CLIMATE_SCHEMA.add_extra(cv.deprecated_schema_constant("climate"))
273
276
 
274
277
 
275
278
  async def setup_climate_core_(var, config):
276
- await setup_entity(var, config)
279
+ await setup_entity(var, config, "climate")
277
280
 
278
281
  visual = config[CONF_VISUAL]
279
282
  if (min_temp := visual.get(CONF_MIN_TEMPERATURE)) is not None:
@@ -1,10 +1,10 @@
1
1
  """CM1106 Sensor component for ESPHome."""
2
2
 
3
- import esphome.codegen as cg
4
- import esphome.config_validation as cv
5
3
  from esphome import automation
6
4
  from esphome.automation import maybe_simple_id
5
+ import esphome.codegen as cg
7
6
  from esphome.components import sensor, uart
7
+ import esphome.config_validation as cv
8
8
  from esphome.const import (
9
9
  CONF_CO2,
10
10
  CONF_ID,
@@ -2,5 +2,7 @@
2
2
 
3
3
  CODEOWNERS = ["@esphome/core"]
4
4
 
5
+ CONF_BYTE_ORDER = "byte_order"
5
6
  CONF_DRAW_ROUNDING = "draw_rounding"
7
+ CONF_ON_STATE_CHANGE = "on_state_change"
6
8
  CONF_REQUEST_HEADERS = "request_headers"
@@ -11,7 +11,6 @@ class CopyBinarySensor : public binary_sensor::BinarySensor, public Component {
11
11
  void set_source(binary_sensor::BinarySensor *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  binary_sensor::BinarySensor *source_;
@@ -10,7 +10,6 @@ class CopyButton : public button::Button, public Component {
10
10
  public:
11
11
  void set_source(button::Button *source) { source_ = source; }
12
12
  void dump_config() override;
13
- float get_setup_priority() const override { return setup_priority::DATA; }
14
13
 
15
14
  protected:
16
15
  void press_action() override;
@@ -11,7 +11,6 @@ class CopyCover : public cover::Cover, public Component {
11
11
  void set_source(cover::Cover *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  cover::CoverTraits get_traits() override;
17
16
 
@@ -11,7 +11,6 @@ class CopyFan : public fan::Fan, public Component {
11
11
  void set_source(fan::Fan *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  fan::FanTraits get_traits() override;
17
16
 
@@ -11,7 +11,6 @@ class CopyLock : public lock::Lock, public Component {
11
11
  void set_source(lock::Lock *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const lock::LockCall &call) override;
@@ -11,7 +11,6 @@ class CopyNumber : public number::Number, public Component {
11
11
  void set_source(number::Number *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(float value) override;
@@ -11,7 +11,6 @@ class CopySelect : public select::Select, public Component {
11
11
  void set_source(select::Select *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const std::string &value) override;
@@ -11,7 +11,6 @@ class CopySensor : public sensor::Sensor, public Component {
11
11
  void set_source(sensor::Sensor *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  sensor::Sensor *source_;
@@ -11,7 +11,6 @@ class CopySwitch : public switch_::Switch, public Component {
11
11
  void set_source(switch_::Switch *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void write_state(bool state) override;
@@ -11,7 +11,6 @@ class CopyText : public text::Text, public Component {
11
11
  void set_source(text::Text *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const std::string &value) override;
@@ -11,7 +11,6 @@ class CopyTextSensor : public text_sensor::TextSensor, public Component {
11
11
  void set_source(text_sensor::TextSensor *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  text_sensor::TextSensor *source_;
@@ -33,8 +33,8 @@ from esphome.const import (
33
33
  DEVICE_CLASS_WINDOW,
34
34
  )
35
35
  from esphome.core import CORE, coroutine_with_priority
36
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
36
37
  from esphome.cpp_generator import MockObjClass
37
- from esphome.cpp_helpers import setup_entity
38
38
 
39
39
  IS_PLATFORM_COMPONENT = True
40
40
 
@@ -126,6 +126,9 @@ _COVER_SCHEMA = (
126
126
  )
127
127
 
128
128
 
129
+ _COVER_SCHEMA.add_extra(entity_duplicate_validator("cover"))
130
+
131
+
129
132
  def cover_schema(
130
133
  class_: MockObjClass,
131
134
  *,
@@ -154,7 +157,7 @@ COVER_SCHEMA.add_extra(cv.deprecated_schema_constant("cover"))
154
157
 
155
158
 
156
159
  async def setup_cover_core_(var, config):
157
- await setup_entity(var, config)
160
+ await setup_entity(var, config, "cover")
158
161
 
159
162
  if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
160
163
  cg.add(var.set_device_class(device_class))
@@ -77,7 +77,6 @@ class CS5460AComponent : public Component,
77
77
 
78
78
  void setup() override;
79
79
  void loop() override {}
80
- float get_setup_priority() const override { return setup_priority::DATA; }
81
80
  void dump_config() override;
82
81
 
83
82
  protected:
@@ -22,8 +22,8 @@ from esphome.const import (
22
22
  CONF_YEAR,
23
23
  )
24
24
  from esphome.core import CORE, coroutine_with_priority
25
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
25
26
  from esphome.cpp_generator import MockObjClass
26
- from esphome.cpp_helpers import setup_entity
27
27
 
28
28
  CODEOWNERS = ["@rfdarter", "@jesserockz"]
29
29
 
@@ -84,6 +84,8 @@ _DATETIME_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
84
84
  .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
85
85
  ).add_extra(_validate_time_present)
86
86
 
87
+ _DATETIME_SCHEMA.add_extra(entity_duplicate_validator("datetime"))
88
+
87
89
 
88
90
  def date_schema(class_: MockObjClass) -> cv.Schema:
89
91
  schema = cv.Schema(
@@ -133,7 +135,7 @@ def datetime_schema(class_: MockObjClass) -> cv.Schema:
133
135
 
134
136
 
135
137
  async def setup_datetime_core_(var, config):
136
- await setup_entity(var, config)
138
+ await setup_entity(var, config, "datetime")
137
139
 
138
140
  if (mqtt_id := config.get(CONF_MQTT_ID)) is not None:
139
141
  mqtt_ = cg.new_Pvariable(mqtt_id, var)
@@ -1,4 +1,5 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.config_helpers import filter_source_files_from_platform
2
3
  import esphome.config_validation as cv
3
4
  from esphome.const import (
4
5
  CONF_BLOCK,
@@ -7,6 +8,7 @@ from esphome.const import (
7
8
  CONF_FREE,
8
9
  CONF_ID,
9
10
  CONF_LOOP_TIME,
11
+ PlatformFramework,
10
12
  )
11
13
 
12
14
  CODEOWNERS = ["@OttoWinter"]
@@ -44,3 +46,21 @@ CONFIG_SCHEMA = cv.All(
44
46
  async def to_code(config):
45
47
  var = cg.new_Pvariable(config[CONF_ID])
46
48
  await cg.register_component(var, config)
49
+
50
+
51
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
52
+ {
53
+ "debug_esp32.cpp": {
54
+ PlatformFramework.ESP32_ARDUINO,
55
+ PlatformFramework.ESP32_IDF,
56
+ },
57
+ "debug_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
58
+ "debug_host.cpp": {PlatformFramework.HOST_NATIVE},
59
+ "debug_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
60
+ "debug_libretiny.cpp": {
61
+ PlatformFramework.BK72XX_ARDUINO,
62
+ PlatformFramework.RTL87XX_ARDUINO,
63
+ PlatformFramework.LN882X_ARDUINO,
64
+ },
65
+ }
66
+ )
@@ -53,6 +53,7 @@ void DebugComponent::on_shutdown() {
53
53
  auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
54
54
  if (component != nullptr) {
55
55
  strncpy(buffer, component->get_component_source(), REBOOT_MAX_LEN - 1);
56
+ buffer[REBOOT_MAX_LEN - 1] = '\0';
56
57
  }
57
58
  ESP_LOGD(TAG, "Storing reboot source: %s", buffer);
58
59
  pref.save(&buffer);
@@ -68,6 +69,7 @@ std::string DebugComponent::get_reset_reason_() {
68
69
  auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
69
70
  char buffer[REBOOT_MAX_LEN]{};
70
71
  if (pref.load(&buffer)) {
72
+ buffer[REBOOT_MAX_LEN - 1] = '\0';
71
73
  reset_reason = "Reboot request from " + std::string(buffer);
72
74
  }
73
75
  }
@@ -1,6 +1,6 @@
1
1
  from esphome import automation, pins
2
2
  import esphome.codegen as cg
3
- from esphome.components import time
3
+ from esphome.components import esp32, time
4
4
  from esphome.components.esp32 import get_esp32_variant
5
5
  from esphome.components.esp32.const import (
6
6
  VARIANT_ESP32,
@@ -11,6 +11,7 @@ from esphome.components.esp32.const import (
11
11
  VARIANT_ESP32S2,
12
12
  VARIANT_ESP32S3,
13
13
  )
14
+ from esphome.config_helpers import filter_source_files_from_platform
14
15
  import esphome.config_validation as cv
15
16
  from esphome.const import (
16
17
  CONF_DEFAULT,
@@ -27,6 +28,7 @@ from esphome.const import (
27
28
  CONF_WAKEUP_PIN,
28
29
  PLATFORM_ESP32,
29
30
  PLATFORM_ESP8266,
31
+ PlatformFramework,
30
32
  )
31
33
 
32
34
  WAKEUP_PINS = {
@@ -114,12 +116,20 @@ def validate_pin_number(value):
114
116
  return value
115
117
 
116
118
 
117
- def validate_config(config):
118
- if get_esp32_variant() == VARIANT_ESP32C3 and CONF_ESP32_EXT1_WAKEUP in config:
119
- raise cv.Invalid("ESP32-C3 does not support wakeup from touch.")
120
- if get_esp32_variant() == VARIANT_ESP32C3 and CONF_TOUCH_WAKEUP in config:
121
- raise cv.Invalid("ESP32-C3 does not support wakeup from ext1")
122
- return config
119
+ def _validate_ex1_wakeup_mode(value):
120
+ if value == "ALL_LOW":
121
+ esp32.only_on_variant(supported=[VARIANT_ESP32], msg_prefix="ALL_LOW")(value)
122
+ if value == "ANY_LOW":
123
+ esp32.only_on_variant(
124
+ supported=[
125
+ VARIANT_ESP32S2,
126
+ VARIANT_ESP32S3,
127
+ VARIANT_ESP32C6,
128
+ VARIANT_ESP32H2,
129
+ ],
130
+ msg_prefix="ANY_LOW",
131
+ )(value)
132
+ return value
123
133
 
124
134
 
125
135
  deep_sleep_ns = cg.esphome_ns.namespace("deep_sleep")
@@ -146,6 +156,7 @@ WAKEUP_PIN_MODES = {
146
156
  esp_sleep_ext1_wakeup_mode_t = cg.global_ns.enum("esp_sleep_ext1_wakeup_mode_t")
147
157
  Ext1Wakeup = deep_sleep_ns.struct("Ext1Wakeup")
148
158
  EXT1_WAKEUP_MODES = {
159
+ "ANY_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_LOW,
149
160
  "ALL_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
150
161
  "ANY_HIGH": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
151
162
  }
@@ -185,16 +196,28 @@ CONFIG_SCHEMA = cv.All(
185
196
  ),
186
197
  cv.Optional(CONF_ESP32_EXT1_WAKEUP): cv.All(
187
198
  cv.only_on_esp32,
199
+ esp32.only_on_variant(
200
+ unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from ext1"
201
+ ),
188
202
  cv.Schema(
189
203
  {
190
204
  cv.Required(CONF_PINS): cv.ensure_list(
191
205
  pins.internal_gpio_input_pin_schema, validate_pin_number
192
206
  ),
193
- cv.Required(CONF_MODE): cv.enum(EXT1_WAKEUP_MODES, upper=True),
207
+ cv.Required(CONF_MODE): cv.All(
208
+ cv.enum(EXT1_WAKEUP_MODES, upper=True),
209
+ _validate_ex1_wakeup_mode,
210
+ ),
194
211
  }
195
212
  ),
196
213
  ),
197
- cv.Optional(CONF_TOUCH_WAKEUP): cv.All(cv.only_on_esp32, cv.boolean),
214
+ cv.Optional(CONF_TOUCH_WAKEUP): cv.All(
215
+ cv.only_on_esp32,
216
+ esp32.only_on_variant(
217
+ unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from touch"
218
+ ),
219
+ cv.boolean,
220
+ ),
198
221
  }
199
222
  ).extend(cv.COMPONENT_SCHEMA),
200
223
  cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266]),
@@ -313,3 +336,14 @@ async def deep_sleep_action_to_code(config, action_id, template_arg, args):
313
336
  var = cg.new_Pvariable(action_id, template_arg)
314
337
  await cg.register_parented(var, config[CONF_ID])
315
338
  return var
339
+
340
+
341
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
342
+ {
343
+ "deep_sleep_esp32.cpp": {
344
+ PlatformFramework.ESP32_ARDUINO,
345
+ PlatformFramework.ESP32_IDF,
346
+ },
347
+ "deep_sleep_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
348
+ }
349
+ )
@@ -455,7 +455,7 @@ CONFIG_SCHEMA = cv.Schema(
455
455
  CONF_NAME: "Demo Plain Sensor",
456
456
  },
457
457
  {
458
- CONF_NAME: "Demo Temperature Sensor",
458
+ CONF_NAME: "Demo Temperature Sensor 1",
459
459
  CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
460
460
  CONF_ICON: ICON_THERMOMETER,
461
461
  CONF_ACCURACY_DECIMALS: 1,
@@ -463,7 +463,7 @@ CONFIG_SCHEMA = cv.Schema(
463
463
  CONF_STATE_CLASS: STATE_CLASS_MEASUREMENT,
464
464
  },
465
465
  {
466
- CONF_NAME: "Demo Temperature Sensor",
466
+ CONF_NAME: "Demo Temperature Sensor 2",
467
467
  CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
468
468
  CONF_ICON: ICON_THERMOMETER,
469
469
  CONF_ACCURACY_DECIMALS: 1,
@@ -1,5 +1,6 @@
1
1
  #include "display.h"
2
2
  #include <utility>
3
+ #include <numbers>
3
4
  #include "display_color_utils.h"
4
5
  #include "esphome/core/hal.h"
5
6
  #include "esphome/core/log.h"
@@ -424,15 +425,15 @@ void HOT Display::get_regular_polygon_vertex(int vertex_id, int *vertex_x, int *
424
425
  // hence we rotate the shape by 270° to orient the polygon up.
425
426
  rotation_degrees += ROTATION_270_DEGREES;
426
427
  // Convert the rotation to radians, easier to use in trigonometrical calculations
427
- float rotation_radians = rotation_degrees * PI / 180;
428
+ float rotation_radians = rotation_degrees * std::numbers::pi / 180;
428
429
  // A pointy top variation means the first vertex of the polygon is at the top center of the shape, this requires no
429
430
  // additional rotation of the shape.
430
431
  // A flat top variation means the first point of the polygon has to be rotated so that the first edge is horizontal,
431
432
  // this requires to rotate the shape by π/edges radians counter-clockwise so that the first point is located on the
432
433
  // left side of the first horizontal edge.
433
- rotation_radians -= (variation == VARIATION_FLAT_TOP) ? PI / edges : 0.0;
434
+ rotation_radians -= (variation == VARIATION_FLAT_TOP) ? std::numbers::pi / edges : 0.0;
434
435
 
435
- float vertex_angle = ((float) vertex_id) / edges * 2 * PI + rotation_radians;
436
+ float vertex_angle = ((float) vertex_id) / edges * 2 * std::numbers::pi + rotation_radians;
436
437
  *vertex_x = (int) round(cos(vertex_angle) * radius) + center_x;
437
438
  *vertex_y = (int) round(sin(vertex_angle) * radius) + center_y;
438
439
  }
@@ -138,8 +138,6 @@ enum DisplayRotation {
138
138
  DISPLAY_ROTATION_270_DEGREES = 270,
139
139
  };
140
140
 
141
- #define PI 3.1415926535897932384626433832795
142
-
143
141
  const int EDGES_TRIGON = 3;
144
142
  const int EDGES_TRIANGLE = 3;
145
143
  const int EDGES_TETRAGON = 4;
@@ -11,7 +11,7 @@ namespace display {
11
11
  static const char *const TAG = "display";
12
12
 
13
13
  void DisplayBuffer::init_internal_(uint32_t buffer_length) {
14
- ExternalRAMAllocator<uint8_t> allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
14
+ RAMAllocator<uint8_t> allocator;
15
15
  this->buffer_ = allocator.allocate(buffer_length);
16
16
  if (this->buffer_ == nullptr) {
17
17
  ESP_LOGE(TAG, "Could not allocate buffer for display!");
@@ -0,0 +1 @@
1
+ CODEOWNERS = ["@mrk-its"]