esphome 2025.6.2__py3-none-any.whl → 2025.7.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) 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 +42 -20
  22. esphome/components/api/api_connection.cpp +318 -391
  23. esphome/components/api/api_connection.h +206 -126
  24. esphome/components/api/api_frame_helper.cpp +89 -124
  25. esphome/components/api/api_frame_helper.h +57 -45
  26. esphome/components/api/api_pb2.cpp +414 -4350
  27. esphome/components/api/api_pb2.h +287 -198
  28. esphome/components/api/api_pb2_dump.cpp +4333 -0
  29. esphome/components/api/api_pb2_service.cpp +180 -425
  30. esphome/components/api/api_pb2_service.h +7 -6
  31. esphome/components/api/api_pb2_size.h +2 -4
  32. esphome/components/api/api_server.cpp +138 -167
  33. esphome/components/api/api_server.h +66 -12
  34. esphome/components/api/client.py +10 -4
  35. esphome/components/api/list_entities.cpp +36 -105
  36. esphome/components/api/list_entities.h +31 -23
  37. esphome/components/api/proto.h +26 -3
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/as5600/as5600.h +0 -1
  41. esphome/components/async_tcp/__init__.py +14 -5
  42. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  43. esphome/components/atm90e32/atm90e32.cpp +2 -1
  44. esphome/components/audio/audio_decoder.cpp +1 -1
  45. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  46. esphome/components/b_parasite/b_parasite.h +0 -1
  47. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  48. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  49. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  50. esphome/components/bh1750/bh1750.cpp +5 -5
  51. esphome/components/binary_sensor/__init__.py +82 -5
  52. esphome/components/binary_sensor/automation.h +19 -1
  53. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  54. esphome/components/binary_sensor/binary_sensor.h +11 -25
  55. esphome/components/binary_sensor/filter.cpp +29 -24
  56. esphome/components/binary_sensor/filter.h +20 -10
  57. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  58. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  60. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  62. esphome/components/ble_client/switch/ble_switch.h +0 -1
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  65. esphome/components/ble_presence/ble_presence_device.h +0 -1
  66. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  67. esphome/components/ble_scanner/ble_scanner.h +0 -1
  68. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  69. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  71. esphome/components/bme680/sensor.py +1 -1
  72. esphome/components/bmp581/bmp581.h +0 -2
  73. esphome/components/button/__init__.py +5 -2
  74. esphome/components/camera/__init__.py +1 -0
  75. esphome/components/camera/camera.cpp +22 -0
  76. esphome/components/camera/camera.h +80 -0
  77. esphome/components/canbus/__init__.py +1 -0
  78. esphome/components/cap1188/cap1188.h +0 -1
  79. esphome/components/captive_portal/__init__.py +12 -2
  80. esphome/components/captive_portal/captive_portal.cpp +12 -2
  81. esphome/components/captive_portal/captive_portal.h +5 -2
  82. esphome/components/ccs811/ccs811.h +0 -2
  83. esphome/components/climate/__init__.py +5 -2
  84. esphome/components/cm1106/sensor.py +2 -2
  85. esphome/components/const/__init__.py +2 -0
  86. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  87. esphome/components/copy/button/copy_button.h +0 -1
  88. esphome/components/copy/cover/copy_cover.h +0 -1
  89. esphome/components/copy/fan/copy_fan.h +0 -1
  90. esphome/components/copy/lock/copy_lock.h +0 -1
  91. esphome/components/copy/number/copy_number.h +0 -1
  92. esphome/components/copy/select/copy_select.h +0 -1
  93. esphome/components/copy/sensor/copy_sensor.h +0 -1
  94. esphome/components/copy/switch/copy_switch.h +0 -1
  95. esphome/components/copy/text/copy_text.h +0 -1
  96. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  97. esphome/components/cover/__init__.py +5 -2
  98. esphome/components/cs5460a/cs5460a.h +0 -1
  99. esphome/components/datetime/__init__.py +4 -2
  100. esphome/components/debug/__init__.py +20 -0
  101. esphome/components/deep_sleep/__init__.py +43 -9
  102. esphome/components/demo/__init__.py +2 -2
  103. esphome/components/display/display.cpp +4 -3
  104. esphome/components/display/display.h +0 -2
  105. esphome/components/display/display_buffer.cpp +1 -1
  106. esphome/components/ds2484/__init__.py +1 -0
  107. esphome/components/ds2484/ds2484.cpp +209 -0
  108. esphome/components/ds2484/ds2484.h +43 -0
  109. esphome/components/ds2484/one_wire.py +37 -0
  110. esphome/components/duty_time/duty_time_sensor.h +0 -1
  111. esphome/components/ens160_base/ens160_base.h +0 -1
  112. esphome/components/es7210/es7210.h +0 -1
  113. esphome/components/es7243e/es7243e.h +0 -1
  114. esphome/components/es8156/es8156.h +0 -1
  115. esphome/components/es8311/es8311.h +0 -1
  116. esphome/components/es8388/es8388.h +0 -1
  117. esphome/components/esp32/__init__.py +102 -135
  118. esphome/components/esp32/core.cpp +0 -4
  119. esphome/components/esp32/gpio.h +1 -1
  120. esphome/components/esp32/helpers.cpp +69 -0
  121. esphome/components/esp32_ble/ble.cpp +5 -6
  122. esphome/components/esp32_ble/ble.h +29 -14
  123. esphome/components/esp32_ble/ble_event.h +6 -6
  124. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  125. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  126. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  127. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  128. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  129. esphome/components/esp32_camera/__init__.py +111 -97
  130. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  131. esphome/components/esp32_camera/esp32_camera.h +35 -30
  132. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  133. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  134. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  135. esphome/components/esp32_hall/sensor.py +2 -21
  136. esphome/components/esp32_hosted/__init__.py +101 -0
  137. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  138. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  139. esphome/components/esp32_rmt/__init__.py +0 -58
  140. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  141. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  142. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  143. esphome/components/esp32_touch/esp32_touch.h +174 -28
  144. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  145. esphome/components/esp32_touch/esp32_touch_v1.cpp +238 -0
  146. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  147. esphome/components/esp8266/__init__.py +1 -0
  148. esphome/components/esp8266/gpio.cpp +10 -10
  149. esphome/components/esp8266/helpers.cpp +31 -0
  150. esphome/components/esphome/ota/__init__.py +1 -0
  151. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  152. esphome/components/ethernet/__init__.py +42 -23
  153. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  154. esphome/components/ethernet/ethernet_component.cpp +69 -29
  155. esphome/components/ethernet/ethernet_component.h +18 -10
  156. esphome/components/event/__init__.py +5 -2
  157. esphome/components/ezo/ezo.h +0 -1
  158. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  159. esphome/components/fan/__init__.py +5 -2
  160. esphome/components/feedback/feedback_cover.h +0 -1
  161. esphome/components/font/__init__.py +92 -82
  162. esphome/components/font/font.cpp +9 -2
  163. esphome/components/font/font.h +20 -5
  164. esphome/components/fs3000/fs3000.h +0 -1
  165. esphome/components/gcja5/gcja5.h +0 -1
  166. esphome/components/gl_r01_i2c/__init__.py +0 -0
  167. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  168. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  169. esphome/components/gl_r01_i2c/sensor.py +36 -0
  170. esphome/components/gp8403/gp8403.h +0 -1
  171. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  172. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  173. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  174. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  175. esphome/components/he60r/he60r.h +0 -1
  176. esphome/components/heatpumpir/climate.py +2 -1
  177. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  178. esphome/components/heatpumpir/heatpumpir.h +1 -0
  179. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  180. esphome/components/host/__init__.py +2 -1
  181. esphome/components/host/helpers.cpp +57 -0
  182. esphome/components/http_request/__init__.py +19 -1
  183. esphome/components/http_request/http_request.h +1 -1
  184. esphome/components/http_request/http_request_arduino.cpp +0 -1
  185. esphome/components/http_request/http_request_arduino.h +1 -0
  186. esphome/components/http_request/http_request_idf.cpp +0 -1
  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 +430 -261
  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 +4 -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 +126 -45
  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 +31 -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 +1 -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 +1 -5
  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/valve/__init__.py +5 -2
  477. esphome/components/vbus/vbus.h +0 -1
  478. esphome/components/veml3235/veml3235.h +0 -1
  479. esphome/components/veml7700/veml7700.h +0 -1
  480. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  481. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  482. esphome/components/watchdog/watchdog.cpp +0 -4
  483. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  484. esphome/components/web_server/__init__.py +34 -19
  485. esphome/components/web_server/ota/__init__.py +32 -0
  486. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  487. esphome/components/web_server/ota/ota_web_server.h +26 -0
  488. esphome/components/web_server/web_server.cpp +311 -430
  489. esphome/components/web_server/web_server.h +33 -23
  490. esphome/components/web_server/web_server_v1.cpp +4 -5
  491. esphome/components/web_server_base/__init__.py +5 -2
  492. esphome/components/web_server_base/web_server_base.cpp +2 -94
  493. esphome/components/web_server_base/web_server_base.h +5 -25
  494. esphome/components/web_server_idf/multipart.cpp +254 -0
  495. esphome/components/web_server_idf/multipart.h +86 -0
  496. esphome/components/web_server_idf/utils.cpp +32 -0
  497. esphome/components/web_server_idf/utils.h +10 -0
  498. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  499. esphome/components/web_server_idf/web_server_idf.h +11 -10
  500. esphome/components/wiegand/wiegand.cpp +2 -2
  501. esphome/components/wifi/__init__.py +18 -0
  502. esphome/components/wifi/wifi_component.cpp +17 -22
  503. esphome/components/wifi/wifi_component.h +27 -23
  504. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  505. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  506. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  507. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  508. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  509. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  510. esphome/components/wireguard/__init__.py +2 -11
  511. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  512. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  513. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  514. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  515. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  516. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  517. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  518. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  519. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  520. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  521. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  522. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  523. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  524. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  525. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  526. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  527. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  528. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  529. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  530. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  531. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  532. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  533. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  534. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  535. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  536. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  537. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  538. esphome/components/zyaura/zyaura.h +0 -1
  539. esphome/config.py +88 -22
  540. esphome/config_helpers.py +74 -1
  541. esphome/config_validation.py +12 -1
  542. esphome/const.py +65 -10
  543. esphome/core/__init__.py +18 -2
  544. esphome/core/application.cpp +163 -10
  545. esphome/core/application.h +145 -165
  546. esphome/core/area.h +19 -0
  547. esphome/core/automation.h +58 -9
  548. esphome/core/color.cpp +3 -5
  549. esphome/core/color.h +16 -16
  550. esphome/core/component.cpp +151 -18
  551. esphome/core/component.h +98 -4
  552. esphome/core/component_iterator.cpp +7 -7
  553. esphome/core/component_iterator.h +9 -7
  554. esphome/core/config.py +155 -6
  555. esphome/core/controller.cpp +4 -2
  556. esphome/core/controller.h +1 -1
  557. esphome/core/datatypes.h +2 -2
  558. esphome/core/defines.h +17 -2
  559. esphome/core/device.h +20 -0
  560. esphome/core/entity_base.cpp +20 -15
  561. esphome/core/entity_base.h +76 -0
  562. esphome/core/entity_helpers.py +162 -1
  563. esphome/core/event_pool.h +81 -0
  564. esphome/core/helpers.cpp +75 -230
  565. esphome/core/helpers.h +164 -104
  566. esphome/core/lock_free_queue.h +151 -0
  567. esphome/core/log.cpp +2 -2
  568. esphome/core/log.h +2 -0
  569. esphome/core/optional.h +5 -0
  570. esphome/core/ring_buffer.cpp +2 -2
  571. esphome/core/scheduler.cpp +278 -103
  572. esphome/core/scheduler.h +157 -17
  573. esphome/core/time.cpp +5 -5
  574. esphome/core/time.h +5 -5
  575. esphome/cpp_generator.py +17 -0
  576. esphome/cpp_helpers.py +0 -22
  577. esphome/cpp_types.py +3 -1
  578. esphome/dashboard/entries.py +1 -1
  579. esphome/dashboard/util/text.py +5 -21
  580. esphome/dashboard/web_server.py +9 -1
  581. esphome/helpers.py +47 -0
  582. esphome/loader.py +15 -1
  583. esphome/pins.py +14 -8
  584. esphome/wizard.py +16 -3
  585. esphome/writer.py +21 -3
  586. esphome/yaml_util.py +0 -2
  587. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
  588. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
  589. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  590. esphome/components/esp32_ble/queue.h +0 -85
  591. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  592. esphome/components/esp32_hall/esp32_hall.h +0 -23
  593. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  594. esphome/components/ld2410/button/reset_button.cpp +0 -9
  595. esphome/components/ld2450/button/reset_button.cpp +0 -9
  596. esphome/components/openthread/tlv.py +0 -65
  597. /esphome/{dashboard/enum.py → enum.py} +0 -0
  598. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
  599. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
  600. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
  601. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
@@ -36,7 +36,6 @@ class QwiicPIRComponent : public Component, public i2c::I2CDevice, public binary
36
36
  void loop() override;
37
37
 
38
38
  void dump_config() override;
39
- float get_setup_priority() const override { return setup_priority::DATA; }
40
39
 
41
40
  void set_debounce_time(uint16_t debounce_time) { this->debounce_time_ = debounce_time; }
42
41
  void set_debounce_mode(DebounceMode mode) { this->debounce_mode_ = mode; }
@@ -17,7 +17,7 @@ bool RadonEyeListener::parse_device(const esp32_ble_tracker::ESPBTDevice &device
17
17
 
18
18
  // Check if the device name starts with any of the prefixes
19
19
  if (std::any_of(prefixes.begin(), prefixes.end(),
20
- [&](const std::string &prefix) { return device.get_name().rfind(prefix, 0) == 0; })) {
20
+ [&](const std::string &prefix) { return device.get_name().starts_with(prefix); })) {
21
21
  // Device found
22
22
  ESP_LOGD(TAG, "Found Radon Eye device Name: %s (MAC: %s)", device.get_name().c_str(),
23
23
  device.address_str().c_str());
@@ -19,7 +19,6 @@ class RC522 : public PollingComponent {
19
19
  void dump_config() override;
20
20
 
21
21
  void update() override;
22
- float get_setup_priority() const override { return setup_priority::DATA; };
23
22
 
24
23
  void loop() override;
25
24
 
@@ -21,8 +21,6 @@ class RDM6300Component : public Component, public uart::UARTDevice {
21
21
  void register_card(RDM6300BinarySensor *obj) { this->cards_.push_back(obj); }
22
22
  void register_trigger(RDM6300Trigger *trig) { this->triggers_.push_back(trig); }
23
23
 
24
- float get_setup_priority() const override { return setup_priority::DATA; }
25
-
26
24
  protected:
27
25
  int8_t read_state_{-1};
28
26
  uint8_t buffer_[6]{};
@@ -57,7 +57,7 @@ RemoteReceiverBinarySensorBase = ns.class_(
57
57
  RemoteReceiverTrigger = ns.class_(
58
58
  "RemoteReceiverTrigger", automation.Trigger, RemoteReceiverListener
59
59
  )
60
- RemoteTransmitterDumper = ns.class_("RemoteTransmitterDumper")
60
+ RemoteReceiverDumperBase = ns.class_("RemoteReceiverDumperBase")
61
61
  RemoteTransmittable = ns.class_("RemoteTransmittable")
62
62
  RemoteTransmitterActionBase = ns.class_(
63
63
  "RemoteTransmitterActionBase", RemoteTransmittable, automation.Action
@@ -126,8 +126,10 @@ def register_trigger(name, type, data_type):
126
126
  return decorator
127
127
 
128
128
 
129
- def register_dumper(name, type):
130
- registerer = DUMPER_REGISTRY.register(name, type, {})
129
+ def register_dumper(name, type, schema=None):
130
+ if schema is None:
131
+ schema = {}
132
+ registerer = DUMPER_REGISTRY.register(name, type, schema)
131
133
 
132
134
  def decorator(func):
133
135
  async def new_func(config, dumper_id):
@@ -189,7 +191,7 @@ def declare_protocol(name):
189
191
  binary_sensor_ = ns.class_(f"{name}BinarySensor", RemoteReceiverBinarySensorBase)
190
192
  trigger = ns.class_(f"{name}Trigger", RemoteReceiverTrigger)
191
193
  action = ns.class_(f"{name}Action", RemoteTransmitterActionBase)
192
- dumper = ns.class_(f"{name}Dumper", RemoteTransmitterDumper)
194
+ dumper = ns.class_(f"{name}Dumper", RemoteReceiverDumperBase)
193
195
  return data, binary_sensor_, trigger, action, dumper
194
196
 
195
197
 
@@ -1405,7 +1407,7 @@ rc_switch_protocols = ns.RC_SWITCH_PROTOCOLS
1405
1407
  RCSwitchData = ns.struct("RCSwitchData")
1406
1408
  RCSwitchBase = ns.class_("RCSwitchBase")
1407
1409
  RCSwitchTrigger = ns.class_("RCSwitchTrigger", RemoteReceiverTrigger)
1408
- RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteTransmitterDumper)
1410
+ RCSwitchDumper = ns.class_("RCSwitchDumper", RemoteReceiverDumperBase)
1409
1411
  RCSwitchRawAction = ns.class_("RCSwitchRawAction", RemoteTransmitterActionBase)
1410
1412
  RCSwitchTypeAAction = ns.class_("RCSwitchTypeAAction", RemoteTransmitterActionBase)
1411
1413
  RCSwitchTypeBAction = ns.class_("RCSwitchTypeBAction", RemoteTransmitterActionBase)
@@ -8,27 +8,6 @@ namespace remote_base {
8
8
 
9
9
  static const char *const TAG = "remote_base";
10
10
 
11
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
12
- RemoteRMTChannel::RemoteRMTChannel(uint8_t mem_block_num) : mem_block_num_(mem_block_num) {
13
- static rmt_channel_t next_rmt_channel = RMT_CHANNEL_0;
14
- this->channel_ = next_rmt_channel;
15
- next_rmt_channel = rmt_channel_t(int(next_rmt_channel) + mem_block_num);
16
- }
17
-
18
- RemoteRMTChannel::RemoteRMTChannel(rmt_channel_t channel, uint8_t mem_block_num)
19
- : channel_(channel), mem_block_num_(mem_block_num) {}
20
-
21
- void RemoteRMTChannel::config_rmt(rmt_config_t &rmt) {
22
- if (rmt_channel_t(int(this->channel_) + this->mem_block_num_) > RMT_CHANNEL_MAX) {
23
- this->mem_block_num_ = int(RMT_CHANNEL_MAX) - int(this->channel_);
24
- ESP_LOGW(TAG, "Not enough RMT memory blocks available, reduced to %i blocks.", this->mem_block_num_);
25
- }
26
- rmt.channel = this->channel_;
27
- rmt.clk_div = this->clock_divider_;
28
- rmt.mem_block_num = this->mem_block_num_;
29
- }
30
- #endif
31
-
32
11
  /* RemoteReceiveData */
33
12
 
34
13
  bool RemoteReceiveData::peek_mark(uint32_t length, uint32_t offset) const {
@@ -40,6 +19,22 @@ bool RemoteReceiveData::peek_mark(uint32_t length, uint32_t offset) const {
40
19
  return value >= 0 && lo <= value && value <= hi;
41
20
  }
42
21
 
22
+ bool RemoteReceiveData::peek_mark_at_least(uint32_t length, uint32_t offset) const {
23
+ if (!this->is_valid(offset))
24
+ return false;
25
+ const int32_t value = this->peek(offset);
26
+ const int32_t lo = this->lower_bound_(length);
27
+ return value >= 0 && lo <= value;
28
+ }
29
+
30
+ bool RemoteReceiveData::peek_mark_at_most(uint32_t length, uint32_t offset) const {
31
+ if (!this->is_valid(offset))
32
+ return false;
33
+ const int32_t value = this->peek(offset);
34
+ const int32_t hi = this->upper_bound_(length);
35
+ return value >= 0 && value <= hi;
36
+ }
37
+
43
38
  bool RemoteReceiveData::peek_space(uint32_t length, uint32_t offset) const {
44
39
  if (!this->is_valid(offset))
45
40
  return false;
@@ -57,6 +52,14 @@ bool RemoteReceiveData::peek_space_at_least(uint32_t length, uint32_t offset) co
57
52
  return value <= 0 && lo <= -value;
58
53
  }
59
54
 
55
+ bool RemoteReceiveData::peek_space_at_most(uint32_t length, uint32_t offset) const {
56
+ if (!this->is_valid(offset))
57
+ return false;
58
+ const int32_t value = this->peek(offset);
59
+ const int32_t hi = this->upper_bound_(length);
60
+ return value <= 0 && -value <= hi;
61
+ }
62
+
60
63
  bool RemoteReceiveData::expect_mark(uint32_t length) {
61
64
  if (!this->peek_mark(length))
62
65
  return false;
@@ -8,10 +8,6 @@
8
8
  #include "esphome/core/component.h"
9
9
  #include "esphome/core/hal.h"
10
10
 
11
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
12
- #include <driver/rmt.h>
13
- #endif
14
-
15
11
  namespace esphome {
16
12
  namespace remote_base {
17
13
 
@@ -57,8 +53,11 @@ class RemoteReceiveData {
57
53
  bool is_valid(uint32_t offset = 0) const { return this->index_ + offset < this->data_.size(); }
58
54
  int32_t peek(uint32_t offset = 0) const { return this->data_[this->index_ + offset]; }
59
55
  bool peek_mark(uint32_t length, uint32_t offset = 0) const;
56
+ bool peek_mark_at_least(uint32_t length, uint32_t offset = 0) const;
57
+ bool peek_mark_at_most(uint32_t length, uint32_t offset = 0) const;
60
58
  bool peek_space(uint32_t length, uint32_t offset = 0) const;
61
59
  bool peek_space_at_least(uint32_t length, uint32_t offset = 0) const;
60
+ bool peek_space_at_most(uint32_t length, uint32_t offset = 0) const;
62
61
  bool peek_item(uint32_t mark, uint32_t space, uint32_t offset = 0) const {
63
62
  return this->peek_space(space, offset + 1) && this->peek_mark(mark, offset);
64
63
  }
@@ -112,43 +111,21 @@ class RemoteComponentBase {
112
111
  #ifdef USE_ESP32
113
112
  class RemoteRMTChannel {
114
113
  public:
115
- #if ESP_IDF_VERSION_MAJOR >= 5
116
114
  void set_clock_resolution(uint32_t clock_resolution) { this->clock_resolution_ = clock_resolution; }
117
115
  void set_rmt_symbols(uint32_t rmt_symbols) { this->rmt_symbols_ = rmt_symbols; }
118
- #else
119
- explicit RemoteRMTChannel(uint8_t mem_block_num = 1);
120
- explicit RemoteRMTChannel(rmt_channel_t channel, uint8_t mem_block_num = 1);
121
-
122
- void config_rmt(rmt_config_t &rmt);
123
- void set_clock_divider(uint8_t clock_divider) { this->clock_divider_ = clock_divider; }
124
- #endif
125
116
 
126
117
  protected:
127
118
  uint32_t from_microseconds_(uint32_t us) {
128
- #if ESP_IDF_VERSION_MAJOR >= 5
129
119
  const uint32_t ticks_per_ten_us = this->clock_resolution_ / 100000u;
130
- #else
131
- const uint32_t ticks_per_ten_us = 80000000u / this->clock_divider_ / 100000u;
132
- #endif
133
120
  return us * ticks_per_ten_us / 10;
134
121
  }
135
122
  uint32_t to_microseconds_(uint32_t ticks) {
136
- #if ESP_IDF_VERSION_MAJOR >= 5
137
123
  const uint32_t ticks_per_ten_us = this->clock_resolution_ / 100000u;
138
- #else
139
- const uint32_t ticks_per_ten_us = 80000000u / this->clock_divider_ / 100000u;
140
- #endif
141
124
  return (ticks * 10) / ticks_per_ten_us;
142
125
  }
143
126
  RemoteComponentBase *remote_base_;
144
- #if ESP_IDF_VERSION_MAJOR >= 5
145
127
  uint32_t clock_resolution_{1000000};
146
128
  uint32_t rmt_symbols_;
147
- #else
148
- rmt_channel_t channel_{RMT_CHANNEL_0};
149
- uint8_t mem_block_num_;
150
- uint8_t clock_divider_{80};
151
- #endif
152
129
  };
153
130
  #endif
154
131
 
@@ -1,23 +1,22 @@
1
1
  from esphome import pins
2
2
  import esphome.codegen as cg
3
3
  from esphome.components import esp32, esp32_rmt, remote_base
4
+ from esphome.config_helpers import filter_source_files_from_platform
4
5
  import esphome.config_validation as cv
5
6
  from esphome.const import (
6
7
  CONF_BUFFER_SIZE,
7
- CONF_CLOCK_DIVIDER,
8
8
  CONF_CLOCK_RESOLUTION,
9
9
  CONF_DUMP,
10
10
  CONF_FILTER,
11
11
  CONF_ID,
12
12
  CONF_IDLE,
13
- CONF_MEMORY_BLOCKS,
14
13
  CONF_PIN,
15
- CONF_RMT_CHANNEL,
16
14
  CONF_RMT_SYMBOLS,
17
15
  CONF_TOLERANCE,
18
16
  CONF_TYPE,
19
17
  CONF_USE_DMA,
20
18
  CONF_VALUE,
19
+ PlatformFramework,
21
20
  )
22
21
  from esphome.core import CORE, TimePeriod
23
22
 
@@ -97,55 +96,43 @@ CONFIG_SCHEMA = remote_base.validate_triggers(
97
96
  esp32="10000b",
98
97
  esp8266="1000b",
99
98
  bk72xx="1000b",
99
+ ln882x="1000b",
100
100
  rtl87xx="1000b",
101
101
  ): cv.validate_bytes,
102
102
  cv.Optional(CONF_FILTER, default="50us"): cv.All(
103
103
  cv.positive_time_period_microseconds,
104
104
  cv.Range(max=TimePeriod(microseconds=4294967295)),
105
105
  ),
106
- cv.SplitDefault(CONF_CLOCK_DIVIDER, esp32_arduino=80): cv.All(
107
- cv.only_on_esp32,
108
- cv.only_with_arduino,
109
- cv.int_range(min=1, max=255),
110
- ),
111
106
  cv.Optional(CONF_CLOCK_RESOLUTION): cv.All(
112
107
  cv.only_on_esp32,
113
- cv.only_with_esp_idf,
114
108
  esp32_rmt.validate_clock_resolution(),
115
109
  ),
116
110
  cv.Optional(CONF_IDLE, default="10ms"): cv.All(
117
111
  cv.positive_time_period_microseconds,
118
112
  cv.Range(max=TimePeriod(microseconds=4294967295)),
119
113
  ),
120
- cv.SplitDefault(CONF_MEMORY_BLOCKS, esp32_arduino=3): cv.All(
121
- cv.only_with_arduino, cv.int_range(min=1, max=8)
122
- ),
123
- cv.Optional(CONF_RMT_CHANNEL): cv.All(
124
- cv.only_with_arduino, esp32_rmt.validate_rmt_channel(tx=False)
125
- ),
126
114
  cv.SplitDefault(
127
115
  CONF_RMT_SYMBOLS,
128
- esp32_idf=192,
129
- esp32_s2_idf=192,
130
- esp32_s3_idf=192,
131
- esp32_p4_idf=192,
132
- esp32_c3_idf=96,
133
- esp32_c5_idf=96,
134
- esp32_c6_idf=96,
135
- esp32_h2_idf=96,
136
- ): cv.All(cv.only_with_esp_idf, cv.int_range(min=2)),
116
+ esp32=192,
117
+ esp32_s2=192,
118
+ esp32_s3=192,
119
+ esp32_p4=192,
120
+ esp32_c3=96,
121
+ esp32_c5=96,
122
+ esp32_c6=96,
123
+ esp32_h2=96,
124
+ ): cv.All(cv.only_on_esp32, cv.int_range(min=2)),
137
125
  cv.Optional(CONF_FILTER_SYMBOLS): cv.All(
138
- cv.only_with_esp_idf, cv.int_range(min=0)
126
+ cv.only_on_esp32, cv.int_range(min=0)
139
127
  ),
140
128
  cv.SplitDefault(
141
129
  CONF_RECEIVE_SYMBOLS,
142
- esp32_idf=192,
143
- ): cv.All(cv.only_with_esp_idf, cv.int_range(min=2)),
130
+ esp32=192,
131
+ ): cv.All(cv.only_on_esp32, cv.int_range(min=2)),
144
132
  cv.Optional(CONF_USE_DMA): cv.All(
145
133
  esp32.only_on_variant(
146
134
  supported=[esp32.const.VARIANT_ESP32S3, esp32.const.VARIANT_ESP32P4]
147
135
  ),
148
- cv.only_with_esp_idf,
149
136
  cv.boolean,
150
137
  ),
151
138
  }
@@ -156,24 +143,15 @@ CONFIG_SCHEMA = remote_base.validate_triggers(
156
143
  async def to_code(config):
157
144
  pin = await cg.gpio_pin_expression(config[CONF_PIN])
158
145
  if CORE.is_esp32:
159
- if esp32_rmt.use_new_rmt_driver():
160
- var = cg.new_Pvariable(config[CONF_ID], pin)
161
- cg.add(var.set_rmt_symbols(config[CONF_RMT_SYMBOLS]))
162
- cg.add(var.set_receive_symbols(config[CONF_RECEIVE_SYMBOLS]))
163
- if CONF_USE_DMA in config:
164
- cg.add(var.set_with_dma(config[CONF_USE_DMA]))
165
- if CONF_CLOCK_RESOLUTION in config:
166
- cg.add(var.set_clock_resolution(config[CONF_CLOCK_RESOLUTION]))
167
- if CONF_FILTER_SYMBOLS in config:
168
- cg.add(var.set_filter_symbols(config[CONF_FILTER_SYMBOLS]))
169
- else:
170
- if (rmt_channel := config.get(CONF_RMT_CHANNEL, None)) is not None:
171
- var = cg.new_Pvariable(
172
- config[CONF_ID], pin, rmt_channel, config[CONF_MEMORY_BLOCKS]
173
- )
174
- else:
175
- var = cg.new_Pvariable(config[CONF_ID], pin, config[CONF_MEMORY_BLOCKS])
176
- cg.add(var.set_clock_divider(config[CONF_CLOCK_DIVIDER]))
146
+ var = cg.new_Pvariable(config[CONF_ID], pin)
147
+ cg.add(var.set_rmt_symbols(config[CONF_RMT_SYMBOLS]))
148
+ cg.add(var.set_receive_symbols(config[CONF_RECEIVE_SYMBOLS]))
149
+ if CONF_USE_DMA in config:
150
+ cg.add(var.set_with_dma(config[CONF_USE_DMA]))
151
+ if CONF_CLOCK_RESOLUTION in config:
152
+ cg.add(var.set_clock_resolution(config[CONF_CLOCK_RESOLUTION]))
153
+ if CONF_FILTER_SYMBOLS in config:
154
+ cg.add(var.set_filter_symbols(config[CONF_FILTER_SYMBOLS]))
177
155
  else:
178
156
  var = cg.new_Pvariable(config[CONF_ID], pin)
179
157
 
@@ -194,3 +172,19 @@ async def to_code(config):
194
172
  cg.add(var.set_buffer_size(config[CONF_BUFFER_SIZE]))
195
173
  cg.add(var.set_filter_us(config[CONF_FILTER]))
196
174
  cg.add(var.set_idle_us(config[CONF_IDLE]))
175
+
176
+
177
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
178
+ {
179
+ "remote_receiver_esp32.cpp": {
180
+ PlatformFramework.ESP32_ARDUINO,
181
+ PlatformFramework.ESP32_IDF,
182
+ },
183
+ "remote_receiver_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
184
+ "remote_receiver_libretiny.cpp": {
185
+ PlatformFramework.BK72XX_ARDUINO,
186
+ PlatformFramework.RTL87XX_ARDUINO,
187
+ PlatformFramework.LN882X_ARDUINO,
188
+ },
189
+ }
190
+ )
@@ -5,7 +5,7 @@
5
5
 
6
6
  #include <cinttypes>
7
7
 
8
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5
8
+ #if defined(USE_ESP32)
9
9
  #include <driver/rmt_rx.h>
10
10
  #endif
11
11
 
@@ -29,7 +29,7 @@ struct RemoteReceiverComponentStore {
29
29
  uint32_t filter_us{10};
30
30
  ISRInternalGPIOPin pin;
31
31
  };
32
- #elif defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5
32
+ #elif defined(USE_ESP32)
33
33
  struct RemoteReceiverComponentStore {
34
34
  /// Stores RMT symbols and rx done event data
35
35
  volatile uint8_t *buffer{nullptr};
@@ -55,21 +55,12 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase,
55
55
 
56
56
  {
57
57
  public:
58
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
59
- RemoteReceiverComponent(InternalGPIOPin *pin, uint8_t mem_block_num = 1)
60
- : RemoteReceiverBase(pin), remote_base::RemoteRMTChannel(mem_block_num) {}
61
-
62
- RemoteReceiverComponent(InternalGPIOPin *pin, rmt_channel_t channel, uint8_t mem_block_num = 1)
63
- : RemoteReceiverBase(pin), remote_base::RemoteRMTChannel(channel, mem_block_num) {}
64
- #else
65
58
  RemoteReceiverComponent(InternalGPIOPin *pin) : RemoteReceiverBase(pin) {}
66
- #endif
67
59
  void setup() override;
68
60
  void dump_config() override;
69
61
  void loop() override;
70
- float get_setup_priority() const override { return setup_priority::DATA; }
71
62
 
72
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5
63
+ #ifdef USE_ESP32
73
64
  void set_filter_symbols(uint32_t filter_symbols) { this->filter_symbols_ = filter_symbols; }
74
65
  void set_receive_symbols(uint32_t receive_symbols) { this->receive_symbols_ = receive_symbols; }
75
66
  void set_with_dma(bool with_dma) { this->with_dma_ = with_dma; }
@@ -80,21 +71,16 @@ class RemoteReceiverComponent : public remote_base::RemoteReceiverBase,
80
71
 
81
72
  protected:
82
73
  #ifdef USE_ESP32
83
- #if ESP_IDF_VERSION_MAJOR >= 5
84
74
  void decode_rmt_(rmt_symbol_word_t *item, size_t item_count);
85
75
  rmt_channel_handle_t channel_{NULL};
86
76
  uint32_t filter_symbols_{0};
87
77
  uint32_t receive_symbols_{0};
88
78
  bool with_dma_{false};
89
- #else
90
- void decode_rmt_(rmt_item32_t *item, size_t item_count);
91
- RingbufHandle_t ringbuf_;
92
- #endif
93
79
  esp_err_t error_code_{ESP_OK};
94
80
  std::string error_string_{""};
95
81
  #endif
96
82
 
97
- #if defined(USE_ESP8266) || defined(USE_LIBRETINY) || (defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5)
83
+ #if defined(USE_ESP8266) || defined(USE_LIBRETINY) || defined(USE_ESP32)
98
84
  RemoteReceiverComponentStore store_;
99
85
  HighFrequencyLoopRequester high_freq_;
100
86
  #endif
@@ -14,7 +14,6 @@ static const uint32_t RMT_CLK_FREQ = 32000000;
14
14
  static const uint32_t RMT_CLK_FREQ = 80000000;
15
15
  #endif
16
16
 
17
- #if ESP_IDF_VERSION_MAJOR >= 5
18
17
  static bool IRAM_ATTR HOT rmt_callback(rmt_channel_handle_t channel, const rmt_rx_done_event_data_t *event, void *arg) {
19
18
  RemoteReceiverComponentStore *store = (RemoteReceiverComponentStore *) arg;
20
19
  rmt_rx_done_event_data_t *event_buffer = (rmt_rx_done_event_data_t *) (store->buffer + store->buffer_write);
@@ -37,11 +36,9 @@ static bool IRAM_ATTR HOT rmt_callback(rmt_channel_handle_t channel, const rmt_r
37
36
  store->buffer_write = next_write;
38
37
  return false;
39
38
  }
40
- #endif
41
39
 
42
40
  void RemoteReceiverComponent::setup() {
43
41
  ESP_LOGCONFIG(TAG, "Running setup");
44
- #if ESP_IDF_VERSION_MAJOR >= 5
45
42
  rmt_rx_channel_config_t channel;
46
43
  memset(&channel, 0, sizeof(channel));
47
44
  channel.clk_src = RMT_CLK_SRC_DEFAULT;
@@ -105,62 +102,11 @@ void RemoteReceiverComponent::setup() {
105
102
  this->mark_failed();
106
103
  return;
107
104
  }
108
- #else
109
- this->pin_->setup();
110
- rmt_config_t rmt{};
111
- this->config_rmt(rmt);
112
- rmt.gpio_num = gpio_num_t(this->pin_->get_pin());
113
- rmt.rmt_mode = RMT_MODE_RX;
114
- if (this->filter_us_ == 0) {
115
- rmt.rx_config.filter_en = false;
116
- } else {
117
- rmt.rx_config.filter_en = true;
118
- rmt.rx_config.filter_ticks_thresh = static_cast<uint8_t>(
119
- std::min(this->from_microseconds_(this->filter_us_) * this->clock_divider_, (uint32_t) 255));
120
- }
121
- rmt.rx_config.idle_threshold =
122
- static_cast<uint16_t>(std::min(this->from_microseconds_(this->idle_us_), (uint32_t) 65535));
123
-
124
- esp_err_t error = rmt_config(&rmt);
125
- if (error != ESP_OK) {
126
- this->error_code_ = error;
127
- this->error_string_ = "in rmt_config";
128
- this->mark_failed();
129
- return;
130
- }
131
-
132
- error = rmt_driver_install(this->channel_, this->buffer_size_, 0);
133
- if (error != ESP_OK) {
134
- this->error_code_ = error;
135
- if (error == ESP_ERR_INVALID_STATE) {
136
- this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_);
137
- } else {
138
- this->error_string_ = "in rmt_driver_install";
139
- }
140
- this->mark_failed();
141
- return;
142
- }
143
- error = rmt_get_ringbuf_handle(this->channel_, &this->ringbuf_);
144
- if (error != ESP_OK) {
145
- this->error_code_ = error;
146
- this->error_string_ = "in rmt_get_ringbuf_handle";
147
- this->mark_failed();
148
- return;
149
- }
150
- error = rmt_rx_start(this->channel_, true);
151
- if (error != ESP_OK) {
152
- this->error_code_ = error;
153
- this->error_string_ = "in rmt_rx_start";
154
- this->mark_failed();
155
- return;
156
- }
157
- #endif
158
105
  }
159
106
 
160
107
  void RemoteReceiverComponent::dump_config() {
161
108
  ESP_LOGCONFIG(TAG, "Remote Receiver:");
162
109
  LOG_PIN(" Pin: ", this->pin_);
163
- #if ESP_IDF_VERSION_MAJOR >= 5
164
110
  ESP_LOGCONFIG(TAG,
165
111
  " Clock resolution: %" PRIu32 " hz\n"
166
112
  " RMT symbols: %" PRIu32 "\n"
@@ -172,22 +118,6 @@ void RemoteReceiverComponent::dump_config() {
172
118
  this->clock_resolution_, this->rmt_symbols_, this->filter_symbols_, this->receive_symbols_,
173
119
  this->tolerance_, (this->tolerance_mode_ == remote_base::TOLERANCE_MODE_TIME) ? " us" : "%",
174
120
  this->filter_us_, this->idle_us_);
175
- #else
176
- if (this->pin_->digital_read()) {
177
- ESP_LOGW(TAG, "Remote Receiver Signal starts with a HIGH value. Usually this means you have to "
178
- "invert the signal using 'inverted: True' in the pin schema!");
179
- }
180
- ESP_LOGCONFIG(TAG,
181
- " Channel: %d\n"
182
- " RMT memory blocks: %d\n"
183
- " Clock divider: %u\n"
184
- " Tolerance: %" PRIu32 "%s\n"
185
- " Filter out pulses shorter than: %" PRIu32 " us\n"
186
- " Signal is done after %" PRIu32 " us of no changes",
187
- this->channel_, this->mem_block_num_, this->clock_divider_, this->tolerance_,
188
- (this->tolerance_mode_ == remote_base::TOLERANCE_MODE_TIME) ? " us" : "%", this->filter_us_,
189
- this->idle_us_);
190
- #endif
191
121
  if (this->is_failed()) {
192
122
  ESP_LOGE(TAG, "Configuring RMT driver failed: %s (%s)", esp_err_to_name(this->error_code_),
193
123
  this->error_string_.c_str());
@@ -195,7 +125,6 @@ void RemoteReceiverComponent::dump_config() {
195
125
  }
196
126
 
197
127
  void RemoteReceiverComponent::loop() {
198
- #if ESP_IDF_VERSION_MAJOR >= 5
199
128
  if (this->store_.error != ESP_OK) {
200
129
  ESP_LOGE(TAG, "Receive error");
201
130
  this->error_code_ = this->store_.error;
@@ -221,25 +150,9 @@ void RemoteReceiverComponent::loop() {
221
150
  this->call_listeners_dumpers_();
222
151
  }
223
152
  }
224
- #else
225
- size_t len = 0;
226
- auto *item = (rmt_item32_t *) xRingbufferReceive(this->ringbuf_, &len, 0);
227
- if (item != nullptr) {
228
- this->decode_rmt_(item, len / sizeof(rmt_item32_t));
229
- vRingbufferReturnItem(this->ringbuf_, item);
230
-
231
- if (!this->temp_.empty()) {
232
- this->call_listeners_dumpers_();
233
- }
234
- }
235
- #endif
236
153
  }
237
154
 
238
- #if ESP_IDF_VERSION_MAJOR >= 5
239
155
  void RemoteReceiverComponent::decode_rmt_(rmt_symbol_word_t *item, size_t item_count) {
240
- #else
241
- void RemoteReceiverComponent::decode_rmt_(rmt_item32_t *item, size_t item_count) {
242
- #endif
243
156
  bool prev_level = false;
244
157
  bool idle_level = false;
245
158
  uint32_t prev_length = 0;
@@ -27,7 +27,7 @@ void IRAM_ATTR HOT RemoteReceiverComponentStore::gpio_intr(RemoteReceiverCompone
27
27
  if (time_since_change <= arg->filter_us)
28
28
  return;
29
29
 
30
- arg->buffer[arg->buffer_write_at = next] = now;
30
+ arg->buffer[arg->buffer_write_at = next] = now; // NOLINT(clang-diagnostic-deprecated-volatile)
31
31
  }
32
32
 
33
33
  void RemoteReceiverComponent::setup() {