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
esphome/__main__.py CHANGED
@@ -34,11 +34,9 @@ from esphome.const import (
34
34
  CONF_PORT,
35
35
  CONF_SUBSTITUTIONS,
36
36
  CONF_TOPIC,
37
- PLATFORM_BK72XX,
38
37
  PLATFORM_ESP32,
39
38
  PLATFORM_ESP8266,
40
39
  PLATFORM_RP2040,
41
- PLATFORM_RTL87XX,
42
40
  SECRETS_FILES,
43
41
  )
44
42
  from esphome.core import CORE, EsphomeError, coroutine
@@ -354,7 +352,7 @@ def upload_program(config, args, host):
354
352
  if CORE.target_platform in (PLATFORM_RP2040):
355
353
  return upload_using_platformio(config, args.device)
356
354
 
357
- if CORE.target_platform in (PLATFORM_BK72XX, PLATFORM_RTL87XX):
355
+ if CORE.is_libretiny:
358
356
  return upload_using_platformio(config, host)
359
357
 
360
358
  return 1 # Unknown target platform
esphome/codegen.py CHANGED
@@ -22,6 +22,7 @@ from esphome.cpp_generator import ( # noqa: F401
22
22
  TemplateArguments,
23
23
  add,
24
24
  add_build_flag,
25
+ add_build_unflag,
25
26
  add_define,
26
27
  add_global,
27
28
  add_library,
@@ -34,6 +35,7 @@ from esphome.cpp_generator import ( # noqa: F401
34
35
  process_lambda,
35
36
  progmem_array,
36
37
  safe_exp,
38
+ set_cpp_standard,
37
39
  statement,
38
40
  static_const_array,
39
41
  templatable,
@@ -4,6 +4,7 @@
4
4
  #include "esphome/core/helpers.h"
5
5
  #include "esphome/core/log.h"
6
6
  #include <cmath>
7
+ #include <numbers>
7
8
 
8
9
  #ifdef USE_ESP8266
9
10
  #include <core_esp8266_waveform.h>
@@ -193,18 +194,17 @@ void AcDimmer::setup() {
193
194
  setTimer1Callback(&timer_interrupt);
194
195
  #endif
195
196
  #ifdef USE_ESP32
196
- // 80 Divider -> 1 count=1µs
197
- dimmer_timer = timerBegin(0, 80, true);
198
- timerAttachInterrupt(dimmer_timer, &AcDimmerDataStore::s_timer_intr, true);
197
+ // timer frequency of 1mhz
198
+ dimmer_timer = timerBegin(1000000);
199
+ timerAttachInterrupt(dimmer_timer, &AcDimmerDataStore::s_timer_intr);
199
200
  // For ESP32, we can't use dynamic interval calculation because the timerX functions
200
201
  // are not callable from ISR (placed in flash storage).
201
202
  // Here we just use an interrupt firing every 50 µs.
202
- timerAlarmWrite(dimmer_timer, 50, true);
203
- timerAlarmEnable(dimmer_timer);
203
+ timerAlarm(dimmer_timer, 50, true, 0);
204
204
  #endif
205
205
  }
206
206
  void AcDimmer::write_state(float state) {
207
- state = std::acos(1 - (2 * state)) / 3.14159; // RMS power compensation
207
+ state = std::acos(1 - (2 * state)) / std::numbers::pi; // RMS power compensation
208
208
  auto new_value = static_cast<uint16_t>(roundf(state * 65535));
209
209
  if (new_value != 0 && this->store_.value == 0)
210
210
  this->store_.init_cycle = this->init_with_half_cycle_;
@@ -10,8 +10,15 @@ from esphome.components.esp32.const import (
10
10
  VARIANT_ESP32S2,
11
11
  VARIANT_ESP32S3,
12
12
  )
13
+ from esphome.config_helpers import filter_source_files_from_platform
13
14
  import esphome.config_validation as cv
14
- from esphome.const import CONF_ANALOG, CONF_INPUT, CONF_NUMBER, PLATFORM_ESP8266
15
+ from esphome.const import (
16
+ CONF_ANALOG,
17
+ CONF_INPUT,
18
+ CONF_NUMBER,
19
+ PLATFORM_ESP8266,
20
+ PlatformFramework,
21
+ )
15
22
  from esphome.core import CORE
16
23
 
17
24
  CODEOWNERS = ["@esphome/core"]
@@ -229,3 +236,20 @@ def validate_adc_pin(value):
229
236
  )(value)
230
237
 
231
238
  raise NotImplementedError
239
+
240
+
241
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
242
+ {
243
+ "adc_sensor_esp32.cpp": {
244
+ PlatformFramework.ESP32_ARDUINO,
245
+ PlatformFramework.ESP32_IDF,
246
+ },
247
+ "adc_sensor_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
248
+ "adc_sensor_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
249
+ "adc_sensor_libretiny.cpp": {
250
+ PlatformFramework.BK72XX_ARDUINO,
251
+ PlatformFramework.RTL87XX_ARDUINO,
252
+ PlatformFramework.LN882X_ARDUINO,
253
+ },
254
+ }
255
+ )
@@ -15,8 +15,7 @@ namespace adc {
15
15
 
16
16
  #ifdef USE_ESP32
17
17
  // clang-format off
18
- #if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 7)) || \
19
- (ESP_IDF_VERSION_MAJOR == 5 && \
18
+ #if (ESP_IDF_VERSION_MAJOR == 5 && \
20
19
  ((ESP_IDF_VERSION_MINOR == 0 && ESP_IDF_VERSION_PATCH >= 5) || \
21
20
  (ESP_IDF_VERSION_MINOR == 1 && ESP_IDF_VERSION_PATCH >= 3) || \
22
21
  (ESP_IDF_VERSION_MINOR >= 2)) \
@@ -28,19 +27,24 @@ static const adc_atten_t ADC_ATTEN_DB_12_COMPAT = ADC_ATTEN_DB_11;
28
27
  #endif
29
28
  #endif // USE_ESP32
30
29
 
31
- enum class SamplingMode : uint8_t { AVG = 0, MIN = 1, MAX = 2 };
30
+ enum class SamplingMode : uint8_t {
31
+ AVG = 0,
32
+ MIN = 1,
33
+ MAX = 2,
34
+ };
35
+
32
36
  const LogString *sampling_mode_to_str(SamplingMode mode);
33
37
 
34
38
  class Aggregator {
35
39
  public:
40
+ Aggregator(SamplingMode mode);
36
41
  void add_sample(uint32_t value);
37
42
  uint32_t aggregate();
38
- Aggregator(SamplingMode mode);
39
43
 
40
44
  protected:
41
- SamplingMode mode_{SamplingMode::AVG};
42
45
  uint32_t aggr_{0};
43
46
  uint32_t samples_{0};
47
+ SamplingMode mode_{SamplingMode::AVG};
44
48
  };
45
49
 
46
50
  class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage_sampler::VoltageSampler {
@@ -81,9 +85,9 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage
81
85
  #endif // USE_RP2040
82
86
 
83
87
  protected:
84
- InternalGPIOPin *pin_;
85
- bool output_raw_{false};
86
88
  uint8_t sample_count_{1};
89
+ bool output_raw_{false};
90
+ InternalGPIOPin *pin_;
87
91
  SamplingMode sampling_mode_{SamplingMode::AVG};
88
92
 
89
93
  #ifdef USE_RP2040
@@ -95,11 +99,7 @@ class ADCSensor : public sensor::Sensor, public PollingComponent, public voltage
95
99
  adc1_channel_t channel1_{ADC1_CHANNEL_MAX};
96
100
  adc2_channel_t channel2_{ADC2_CHANNEL_MAX};
97
101
  bool autorange_{false};
98
- #if ESP_IDF_VERSION_MAJOR >= 5
99
102
  esp_adc_cal_characteristics_t cal_characteristics_[SOC_ADC_ATTEN_NUM] = {};
100
- #else
101
- esp_adc_cal_characteristics_t cal_characteristics_[ADC_ATTEN_MAX] = {};
102
- #endif // ESP_IDF_VERSION_MAJOR
103
103
  #endif // USE_ESP32
104
104
  };
105
105
 
@@ -61,7 +61,7 @@ uint32_t Aggregator::aggregate() {
61
61
 
62
62
  void ADCSensor::update() {
63
63
  float value_v = this->sample();
64
- ESP_LOGV(TAG, "'%s': Got voltage=%.4fV", this->get_name().c_str(), value_v);
64
+ ESP_LOGV(TAG, "'%s': Voltage=%.4fV", this->get_name().c_str(), value_v);
65
65
  this->publish_state(value_v);
66
66
  }
67
67
 
@@ -55,32 +55,40 @@ void ADCSensor::setup() {
55
55
  }
56
56
 
57
57
  void ADCSensor::dump_config() {
58
+ static const char *const ATTEN_AUTO_STR = "auto";
59
+ static const char *const ATTEN_0DB_STR = "0 db";
60
+ static const char *const ATTEN_2_5DB_STR = "2.5 db";
61
+ static const char *const ATTEN_6DB_STR = "6 db";
62
+ static const char *const ATTEN_12DB_STR = "12 db";
63
+ const char *atten_str = ATTEN_AUTO_STR;
64
+
58
65
  LOG_SENSOR("", "ADC Sensor", this);
59
66
  LOG_PIN(" Pin: ", this->pin_);
60
- if (this->autorange_) {
61
- ESP_LOGCONFIG(TAG, " Attenuation: auto");
62
- } else {
67
+
68
+ if (!this->autorange_) {
63
69
  switch (this->attenuation_) {
64
70
  case ADC_ATTEN_DB_0:
65
- ESP_LOGCONFIG(TAG, " Attenuation: 0db");
71
+ atten_str = ATTEN_0DB_STR;
66
72
  break;
67
73
  case ADC_ATTEN_DB_2_5:
68
- ESP_LOGCONFIG(TAG, " Attenuation: 2.5db");
74
+ atten_str = ATTEN_2_5DB_STR;
69
75
  break;
70
76
  case ADC_ATTEN_DB_6:
71
- ESP_LOGCONFIG(TAG, " Attenuation: 6db");
77
+ atten_str = ATTEN_6DB_STR;
72
78
  break;
73
79
  case ADC_ATTEN_DB_12_COMPAT:
74
- ESP_LOGCONFIG(TAG, " Attenuation: 12db");
80
+ atten_str = ATTEN_12DB_STR;
75
81
  break;
76
82
  default: // This is to satisfy the unused ADC_ATTEN_MAX
77
83
  break;
78
84
  }
79
85
  }
86
+
80
87
  ESP_LOGCONFIG(TAG,
88
+ " Attenuation: %s\n"
81
89
  " Samples: %i\n"
82
90
  " Sampling mode: %s",
83
- this->sample_count_, LOG_STR_ARG(sampling_mode_to_str(this->sampling_mode_)));
91
+ atten_str, this->sample_count_, LOG_STR_ARG(sampling_mode_to_str(this->sampling_mode_)));
84
92
  LOG_UPDATE_INTERVAL(this);
85
93
  }
86
94
 
@@ -85,8 +85,6 @@ class ADE7880 : public i2c::I2CDevice, public PollingComponent {
85
85
 
86
86
  void dump_config() override;
87
87
 
88
- float get_setup_priority() const override { return setup_priority::DATA; }
89
-
90
88
  protected:
91
89
  ADE7880Store store_{};
92
90
  InternalGPIOPin *irq0_pin_{nullptr};
@@ -49,7 +49,6 @@ class ADS1115Component : public Component, public i2c::I2CDevice {
49
49
  void setup() override;
50
50
  void dump_config() override;
51
51
  /// HARDWARE_LATE setup priority
52
- float get_setup_priority() const override { return setup_priority::DATA; }
53
52
  void set_continuous_mode(bool continuous_mode) { continuous_mode_ = continuous_mode; }
54
53
 
55
54
  /// Helper method to request a measurement from a sensor.
@@ -34,7 +34,6 @@ class ADS1118 : public Component,
34
34
  ADS1118() = default;
35
35
  void setup() override;
36
36
  void dump_config() override;
37
- float get_setup_priority() const override { return setup_priority::DATA; }
38
37
  /// Helper method to request a measurement from a sensor.
39
38
  float request_measurement(ADS1118Multiplexer multiplexer, ADS1118Gain gain, bool temperature_mode);
40
39
 
@@ -31,8 +31,6 @@ class AGS10Component : public PollingComponent, public i2c::I2CDevice {
31
31
 
32
32
  void dump_config() override;
33
33
 
34
- float get_setup_priority() const override { return setup_priority::DATA; }
35
-
36
34
  /**
37
35
  * Modifies target address of AGS10.
38
36
  *
@@ -66,7 +66,6 @@ class AIC3204 : public audio_dac::AudioDac, public Component, public i2c::I2CDev
66
66
  public:
67
67
  void setup() override;
68
68
  void dump_config() override;
69
- float get_setup_priority() const override { return setup_priority::DATA; }
70
69
 
71
70
  bool set_mute_off() override;
72
71
  bool set_mute_on() override;
@@ -14,8 +14,8 @@ from esphome.const import (
14
14
  CONF_WEB_SERVER,
15
15
  )
16
16
  from esphome.core import CORE, coroutine_with_priority
17
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
17
18
  from esphome.cpp_generator import MockObjClass
18
- from esphome.cpp_helpers import setup_entity
19
19
 
20
20
  CODEOWNERS = ["@grahambrown11", "@hwstar"]
21
21
  IS_PLATFORM_COMPONENT = True
@@ -149,6 +149,9 @@ _ALARM_CONTROL_PANEL_SCHEMA = (
149
149
  )
150
150
 
151
151
 
152
+ _ALARM_CONTROL_PANEL_SCHEMA.add_extra(entity_duplicate_validator("alarm_control_panel"))
153
+
154
+
152
155
  def alarm_control_panel_schema(
153
156
  class_: MockObjClass,
154
157
  *,
@@ -190,7 +193,7 @@ ALARM_CONTROL_PANEL_CONDITION_SCHEMA = maybe_simple_id(
190
193
 
191
194
 
192
195
  async def setup_alarm_control_panel_core_(var, config):
193
- await setup_entity(var, config)
196
+ await setup_entity(var, config, "alarm_control_panel")
194
197
  for conf in config.get(CONF_ON_STATE, []):
195
198
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
196
199
  await automation.build_automation(trigger, [], conf)
@@ -41,7 +41,6 @@ class Alpha3 : public esphome::ble_client::BLEClientNode, public PollingComponen
41
41
  void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
42
42
  esp_ble_gattc_cb_param_t *param) override;
43
43
  void dump_config() override;
44
- float get_setup_priority() const override { return setup_priority::DATA; }
45
44
  void set_flow_sensor(sensor::Sensor *sensor) { this->flow_sensor_ = sensor; }
46
45
  void set_head_sensor(sensor::Sensor *sensor) { this->head_sensor_ = sensor; }
47
46
  void set_power_sensor(sensor::Sensor *sensor) { this->power_sensor_ = sensor; }
@@ -22,7 +22,6 @@ class Am43Component : public cover::Cover, public esphome::ble_client::BLEClient
22
22
  void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
23
23
  esp_ble_gattc_cb_param_t *param) override;
24
24
  void dump_config() override;
25
- float get_setup_priority() const override { return setup_priority::DATA; }
26
25
  cover::CoverTraits get_traits() override;
27
26
  void set_pin(uint16_t pin) { this->pin_ = pin; }
28
27
  void set_invert_position(bool invert_position) { this->invert_position_ = invert_position; }
@@ -22,7 +22,6 @@ class Am43 : public esphome::ble_client::BLEClientNode, public PollingComponent
22
22
  void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
23
23
  esp_ble_gattc_cb_param_t *param) override;
24
24
  void dump_config() override;
25
- float get_setup_priority() const override { return setup_priority::DATA; }
26
25
  void set_battery(sensor::Sensor *battery) { battery_ = battery; }
27
26
  void set_illuminance(sensor::Sensor *illuminance) { illuminance_ = illuminance; }
28
27
 
@@ -12,8 +12,6 @@ class AnalogThresholdBinarySensor : public Component, public binary_sensor::Bina
12
12
  void dump_config() override;
13
13
  void setup() override;
14
14
 
15
- float get_setup_priority() const override { return setup_priority::DATA; }
16
-
17
15
  void set_sensor(sensor::Sensor *analog_sensor);
18
16
  template<typename T> void set_upper_threshold(T upper_threshold) { this->upper_threshold_ = upper_threshold; }
19
17
  template<typename T> void set_lower_threshold(T lower_threshold) { this->lower_threshold_ = lower_threshold; }
@@ -17,7 +17,11 @@ void Anova::setup() {
17
17
  this->current_request_ = 0;
18
18
  }
19
19
 
20
- void Anova::loop() {}
20
+ void Anova::loop() {
21
+ // Parent BLEClientNode has a loop() method, but this component uses
22
+ // polling via update() and BLE callbacks so loop isn't needed
23
+ this->disable_loop();
24
+ }
21
25
 
22
26
  void Anova::control(const ClimateCall &call) {
23
27
  if (call.get_mode().has_value()) {
@@ -26,7 +26,6 @@ class Anova : public climate::Climate, public esphome::ble_client::BLEClientNode
26
26
  void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
27
27
  esp_ble_gattc_cb_param_t *param) override;
28
28
  void dump_config() override;
29
- float get_setup_priority() const override { return setup_priority::DATA; }
30
29
  climate::ClimateTraits traits() override {
31
30
  auto traits = climate::ClimateTraits();
32
31
  traits.set_supports_current_temperature(true);
@@ -23,7 +23,7 @@ void APDS9960::setup() {
23
23
  return;
24
24
  }
25
25
 
26
- if (id != 0xAB && id != 0x9C && id != 0xA8) { // APDS9960 all should have one of these IDs
26
+ if (id != 0xAB && id != 0x9C && id != 0xA8 && id != 0x9E) { // APDS9960 all should have one of these IDs
27
27
  this->error_code_ = WRONG_ID;
28
28
  this->mark_failed();
29
29
  return;
@@ -3,6 +3,7 @@ import base64
3
3
  from esphome import automation
4
4
  from esphome.automation import Condition
5
5
  import esphome.codegen as cg
6
+ from esphome.config_helpers import get_logger_level
6
7
  import esphome.config_validation as cv
7
8
  from esphome.const import (
8
9
  CONF_ACTION,
@@ -23,8 +24,9 @@ from esphome.const import (
23
24
  CONF_TRIGGER_ID,
24
25
  CONF_VARIABLES,
25
26
  )
26
- from esphome.core import coroutine_with_priority
27
+ from esphome.core import CORE, coroutine_with_priority
27
28
 
29
+ DOMAIN = "api"
28
30
  DEPENDENCIES = ["network"]
29
31
  AUTO_LOAD = ["socket"]
30
32
  CODEOWNERS = ["@OttoWinter"]
@@ -50,6 +52,7 @@ SERVICE_ARG_NATIVE_TYPES = {
50
52
  }
51
53
  CONF_ENCRYPTION = "encryption"
52
54
  CONF_BATCH_DELAY = "batch_delay"
55
+ CONF_CUSTOM_SERVICES = "custom_services"
53
56
 
54
57
 
55
58
  def validate_encryption_key(value):
@@ -110,9 +113,11 @@ CONFIG_SCHEMA = cv.All(
110
113
  ): ACTIONS_SCHEMA,
111
114
  cv.Exclusive(CONF_ACTIONS, group_of_exclusion=CONF_ACTIONS): ACTIONS_SCHEMA,
112
115
  cv.Optional(CONF_ENCRYPTION): _encryption_schema,
113
- cv.Optional(
114
- CONF_BATCH_DELAY, default="100ms"
115
- ): cv.positive_time_period_milliseconds,
116
+ cv.Optional(CONF_BATCH_DELAY, default="100ms"): cv.All(
117
+ cv.positive_time_period_milliseconds,
118
+ cv.Range(max=cv.TimePeriod(milliseconds=65535)),
119
+ ),
120
+ cv.Optional(CONF_CUSTOM_SERVICES, default=False): cv.boolean,
116
121
  cv.Optional(CONF_ON_CLIENT_CONNECTED): automation.validate_automation(
117
122
  single=True
118
123
  ),
@@ -131,27 +136,35 @@ async def to_code(config):
131
136
  await cg.register_component(var, config)
132
137
 
133
138
  cg.add(var.set_port(config[CONF_PORT]))
134
- cg.add(var.set_password(config[CONF_PASSWORD]))
139
+ if config[CONF_PASSWORD]:
140
+ cg.add_define("USE_API_PASSWORD")
141
+ cg.add(var.set_password(config[CONF_PASSWORD]))
135
142
  cg.add(var.set_reboot_timeout(config[CONF_REBOOT_TIMEOUT]))
136
143
  cg.add(var.set_batch_delay(config[CONF_BATCH_DELAY]))
137
144
 
138
- for conf in config.get(CONF_ACTIONS, []):
139
- template_args = []
140
- func_args = []
141
- service_arg_names = []
142
- for name, var_ in conf[CONF_VARIABLES].items():
143
- native = SERVICE_ARG_NATIVE_TYPES[var_]
144
- template_args.append(native)
145
- func_args.append((native, name))
146
- service_arg_names.append(name)
147
- templ = cg.TemplateArguments(*template_args)
148
- trigger = cg.new_Pvariable(
149
- conf[CONF_TRIGGER_ID], templ, conf[CONF_ACTION], service_arg_names
150
- )
151
- cg.add(var.register_user_service(trigger))
152
- await automation.build_automation(trigger, func_args, conf)
145
+ # Set USE_API_SERVICES if any services are enabled
146
+ if config.get(CONF_ACTIONS) or config[CONF_CUSTOM_SERVICES]:
147
+ cg.add_define("USE_API_SERVICES")
148
+
149
+ if actions := config.get(CONF_ACTIONS, []):
150
+ for conf in actions:
151
+ template_args = []
152
+ func_args = []
153
+ service_arg_names = []
154
+ for name, var_ in conf[CONF_VARIABLES].items():
155
+ native = SERVICE_ARG_NATIVE_TYPES[var_]
156
+ template_args.append(native)
157
+ func_args.append((native, name))
158
+ service_arg_names.append(name)
159
+ templ = cg.TemplateArguments(*template_args)
160
+ trigger = cg.new_Pvariable(
161
+ conf[CONF_TRIGGER_ID], templ, conf[CONF_ACTION], service_arg_names
162
+ )
163
+ cg.add(var.register_user_service(trigger))
164
+ await automation.build_automation(trigger, func_args, conf)
153
165
 
154
166
  if CONF_ON_CLIENT_CONNECTED in config:
167
+ cg.add_define("USE_API_CLIENT_CONNECTED_TRIGGER")
155
168
  await automation.build_automation(
156
169
  var.get_client_connected_trigger(),
157
170
  [(cg.std_string, "client_info"), (cg.std_string, "client_address")],
@@ -159,6 +172,7 @@ async def to_code(config):
159
172
  )
160
173
 
161
174
  if CONF_ON_CLIENT_DISCONNECTED in config:
175
+ cg.add_define("USE_API_CLIENT_DISCONNECTED_TRIGGER")
162
176
  await automation.build_automation(
163
177
  var.get_client_disconnected_trigger(),
164
178
  [(cg.std_string, "client_info"), (cg.std_string, "client_address")],
@@ -177,7 +191,7 @@ async def to_code(config):
177
191
  # and plaintext disabled. Only a factory reset can remove it.
178
192
  cg.add_define("USE_API_PLAINTEXT")
179
193
  cg.add_define("USE_API_NOISE")
180
- cg.add_library("esphome/noise-c", "0.1.6")
194
+ cg.add_library("esphome/noise-c", "0.1.10")
181
195
  else:
182
196
  cg.add_define("USE_API_PLAINTEXT")
183
197
 
@@ -306,3 +320,25 @@ async def homeassistant_tag_scanned_to_code(config, action_id, template_arg, arg
306
320
  @automation.register_condition("api.connected", APIConnectedCondition, {})
307
321
  async def api_connected_to_code(config, condition_id, template_arg, args):
308
322
  return cg.new_Pvariable(condition_id, template_arg)
323
+
324
+
325
+ def FILTER_SOURCE_FILES() -> list[str]:
326
+ """Filter out api_pb2_dump.cpp when proto message dumping is not enabled
327
+ and user_services.cpp when no services are defined."""
328
+ files_to_filter = []
329
+
330
+ # api_pb2_dump.cpp is only needed when HAS_PROTO_MESSAGE_DUMP is defined
331
+ # This is a particularly large file that still needs to be opened and read
332
+ # all the way to the end even when ifdef'd out
333
+ #
334
+ # HAS_PROTO_MESSAGE_DUMP is defined when ESPHOME_LOG_HAS_VERY_VERBOSE is set,
335
+ # which happens when the logger level is VERY_VERBOSE
336
+ if get_logger_level() != "VERY_VERBOSE":
337
+ files_to_filter.append("api_pb2_dump.cpp")
338
+
339
+ # user_services.cpp is only needed when services are defined
340
+ config = CORE.config.get(DOMAIN, {})
341
+ if config and not config.get(CONF_ACTIONS) and not config[CONF_CUSTOM_SERVICES]:
342
+ files_to_filter.append("user_services.cpp")
343
+
344
+ return files_to_filter