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
@@ -1,19 +1,19 @@
1
1
  from esphome import automation, 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_CARRIER_DUTY_PERCENT,
7
- CONF_CLOCK_DIVIDER,
8
8
  CONF_CLOCK_RESOLUTION,
9
9
  CONF_ID,
10
10
  CONF_INVERTED,
11
11
  CONF_MODE,
12
12
  CONF_OPEN_DRAIN,
13
13
  CONF_PIN,
14
- CONF_RMT_CHANNEL,
15
14
  CONF_RMT_SYMBOLS,
16
15
  CONF_USE_DMA,
16
+ PlatformFramework,
17
17
  )
18
18
  from esphome.core import CORE
19
19
 
@@ -38,34 +38,26 @@ CONFIG_SCHEMA = cv.Schema(
38
38
  ),
39
39
  cv.Optional(CONF_CLOCK_RESOLUTION): cv.All(
40
40
  cv.only_on_esp32,
41
- cv.only_with_esp_idf,
42
41
  esp32_rmt.validate_clock_resolution(),
43
42
  ),
44
- cv.Optional(CONF_CLOCK_DIVIDER): cv.All(
45
- cv.only_on_esp32, cv.only_with_arduino, cv.int_range(min=1, max=255)
46
- ),
47
- cv.Optional(CONF_EOT_LEVEL): cv.All(cv.only_with_esp_idf, cv.boolean),
43
+ cv.Optional(CONF_EOT_LEVEL): cv.All(cv.only_on_esp32, cv.boolean),
48
44
  cv.Optional(CONF_USE_DMA): cv.All(
49
45
  esp32.only_on_variant(
50
46
  supported=[esp32.const.VARIANT_ESP32S3, esp32.const.VARIANT_ESP32P4]
51
47
  ),
52
- cv.only_with_esp_idf,
53
48
  cv.boolean,
54
49
  ),
55
50
  cv.SplitDefault(
56
51
  CONF_RMT_SYMBOLS,
57
- esp32_idf=64,
58
- esp32_s2_idf=64,
59
- esp32_s3_idf=48,
60
- esp32_p4_idf=48,
61
- esp32_c3_idf=48,
62
- esp32_c5_idf=48,
63
- esp32_c6_idf=48,
64
- esp32_h2_idf=48,
65
- ): cv.All(cv.only_with_esp_idf, cv.int_range(min=2)),
66
- cv.Optional(CONF_RMT_CHANNEL): cv.All(
67
- cv.only_with_arduino, esp32_rmt.validate_rmt_channel(tx=True)
68
- ),
52
+ esp32=64,
53
+ esp32_s2=64,
54
+ esp32_s3=48,
55
+ esp32_p4=48,
56
+ esp32_c3=48,
57
+ esp32_c5=48,
58
+ esp32_c6=48,
59
+ esp32_h2=48,
60
+ ): cv.All(cv.only_on_esp32, cv.int_range(min=2)),
69
61
  cv.Optional(CONF_ON_TRANSMIT): automation.validate_automation(single=True),
70
62
  cv.Optional(CONF_ON_COMPLETE): automation.validate_automation(single=True),
71
63
  }
@@ -75,30 +67,21 @@ CONFIG_SCHEMA = cv.Schema(
75
67
  async def to_code(config):
76
68
  pin = await cg.gpio_pin_expression(config[CONF_PIN])
77
69
  if CORE.is_esp32:
78
- if esp32_rmt.use_new_rmt_driver():
79
- var = cg.new_Pvariable(config[CONF_ID], pin)
80
- cg.add(var.set_rmt_symbols(config[CONF_RMT_SYMBOLS]))
81
- if CONF_CLOCK_RESOLUTION in config:
82
- cg.add(var.set_clock_resolution(config[CONF_CLOCK_RESOLUTION]))
83
- if CONF_USE_DMA in config:
84
- cg.add(var.set_with_dma(config[CONF_USE_DMA]))
85
- if CONF_EOT_LEVEL in config:
86
- cg.add(var.set_eot_level(config[CONF_EOT_LEVEL]))
87
- else:
88
- cg.add(
89
- var.set_eot_level(
90
- config[CONF_PIN][CONF_MODE][CONF_OPEN_DRAIN]
91
- or config[CONF_PIN][CONF_INVERTED]
92
- )
93
- )
70
+ var = cg.new_Pvariable(config[CONF_ID], pin)
71
+ cg.add(var.set_rmt_symbols(config[CONF_RMT_SYMBOLS]))
72
+ if CONF_CLOCK_RESOLUTION in config:
73
+ cg.add(var.set_clock_resolution(config[CONF_CLOCK_RESOLUTION]))
74
+ if CONF_USE_DMA in config:
75
+ cg.add(var.set_with_dma(config[CONF_USE_DMA]))
76
+ if CONF_EOT_LEVEL in config:
77
+ cg.add(var.set_eot_level(config[CONF_EOT_LEVEL]))
94
78
  else:
95
- if (rmt_channel := config.get(CONF_RMT_CHANNEL, None)) is not None:
96
- var = cg.new_Pvariable(config[CONF_ID], pin, rmt_channel)
97
- else:
98
- var = cg.new_Pvariable(config[CONF_ID], pin)
99
- if CONF_CLOCK_DIVIDER in config:
100
- cg.add(var.set_clock_divider(config[CONF_CLOCK_DIVIDER]))
101
-
79
+ cg.add(
80
+ var.set_eot_level(
81
+ config[CONF_PIN][CONF_MODE][CONF_OPEN_DRAIN]
82
+ or config[CONF_PIN][CONF_INVERTED]
83
+ )
84
+ )
102
85
  else:
103
86
  var = cg.new_Pvariable(config[CONF_ID], pin)
104
87
  await cg.register_component(var, config)
@@ -114,3 +97,19 @@ async def to_code(config):
114
97
  await automation.build_automation(
115
98
  var.get_complete_trigger(), [], on_complete_config
116
99
  )
100
+
101
+
102
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
103
+ {
104
+ "remote_transmitter_esp32.cpp": {
105
+ PlatformFramework.ESP32_ARDUINO,
106
+ PlatformFramework.ESP32_IDF,
107
+ },
108
+ "remote_transmitter_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
109
+ "remote_transmitter_libretiny.cpp": {
110
+ PlatformFramework.BK72XX_ARDUINO,
111
+ PlatformFramework.RTL87XX_ARDUINO,
112
+ PlatformFramework.LN882X_ARDUINO,
113
+ },
114
+ }
115
+ )
@@ -5,7 +5,7 @@
5
5
 
6
6
  #include <vector>
7
7
 
8
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5
8
+ #if defined(USE_ESP32)
9
9
  #include <driver/rmt_tx.h>
10
10
  #endif
11
11
 
@@ -20,15 +20,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
20
20
  #endif
21
21
  {
22
22
  public:
23
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR < 5
24
- RemoteTransmitterComponent(InternalGPIOPin *pin, uint8_t mem_block_num = 1)
25
- : remote_base::RemoteTransmitterBase(pin), remote_base::RemoteRMTChannel(mem_block_num) {}
26
-
27
- RemoteTransmitterComponent(InternalGPIOPin *pin, rmt_channel_t channel, uint8_t mem_block_num = 1)
28
- : remote_base::RemoteTransmitterBase(pin), remote_base::RemoteRMTChannel(channel, mem_block_num) {}
29
- #else
30
23
  explicit RemoteTransmitterComponent(InternalGPIOPin *pin) : remote_base::RemoteTransmitterBase(pin) {}
31
- #endif
32
24
  void setup() override;
33
25
 
34
26
  void dump_config() override;
@@ -38,7 +30,7 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
38
30
 
39
31
  void set_carrier_duty_percent(uint8_t carrier_duty_percent) { this->carrier_duty_percent_ = carrier_duty_percent; }
40
32
 
41
- #if defined(USE_ESP32) && ESP_IDF_VERSION_MAJOR >= 5
33
+ #if defined(USE_ESP32)
42
34
  void set_with_dma(bool with_dma) { this->with_dma_ = with_dma; }
43
35
  void set_eot_level(bool eot_level) { this->eot_level_ = eot_level; }
44
36
  void digital_write(bool value);
@@ -65,15 +57,11 @@ class RemoteTransmitterComponent : public remote_base::RemoteTransmitterBase,
65
57
 
66
58
  uint32_t current_carrier_frequency_{38000};
67
59
  bool initialized_{false};
68
- #if ESP_IDF_VERSION_MAJOR >= 5
69
60
  std::vector<rmt_symbol_word_t> rmt_temp_;
70
61
  bool with_dma_{false};
71
62
  bool eot_level_{false};
72
63
  rmt_channel_handle_t channel_{NULL};
73
64
  rmt_encoder_handle_t encoder_{NULL};
74
- #else
75
- std::vector<rmt_item32_t> rmt_temp_;
76
- #endif
77
65
  esp_err_t error_code_{ESP_OK};
78
66
  std::string error_string_{""};
79
67
  bool inverted_{false};
@@ -18,18 +18,10 @@ void RemoteTransmitterComponent::setup() {
18
18
 
19
19
  void RemoteTransmitterComponent::dump_config() {
20
20
  ESP_LOGCONFIG(TAG, "Remote Transmitter:");
21
- #if ESP_IDF_VERSION_MAJOR >= 5
22
21
  ESP_LOGCONFIG(TAG,
23
22
  " Clock resolution: %" PRIu32 " hz\n"
24
23
  " RMT symbols: %" PRIu32,
25
24
  this->clock_resolution_, this->rmt_symbols_);
26
- #else
27
- ESP_LOGCONFIG(TAG,
28
- " Channel: %d\n"
29
- " RMT memory blocks: %d\n"
30
- " Clock divider: %u",
31
- this->channel_, this->mem_block_num_, this->clock_divider_);
32
- #endif
33
25
  LOG_PIN(" Pin: ", this->pin_);
34
26
 
35
27
  if (this->current_carrier_frequency_ != 0 && this->carrier_duty_percent_ != 100) {
@@ -42,7 +34,6 @@ void RemoteTransmitterComponent::dump_config() {
42
34
  }
43
35
  }
44
36
 
45
- #if ESP_IDF_VERSION_MAJOR >= 5
46
37
  void RemoteTransmitterComponent::digital_write(bool value) {
47
38
  rmt_symbol_word_t symbol = {
48
39
  .duration0 = 1,
@@ -65,10 +56,8 @@ void RemoteTransmitterComponent::digital_write(bool value) {
65
56
  this->status_set_warning();
66
57
  }
67
58
  }
68
- #endif
69
59
 
70
60
  void RemoteTransmitterComponent::configure_rmt_() {
71
- #if ESP_IDF_VERSION_MAJOR >= 5
72
61
  esp_err_t error;
73
62
 
74
63
  if (!this->initialized_) {
@@ -140,54 +129,6 @@ void RemoteTransmitterComponent::configure_rmt_() {
140
129
  this->mark_failed();
141
130
  return;
142
131
  }
143
- #else
144
- rmt_config_t c{};
145
-
146
- this->config_rmt(c);
147
- c.rmt_mode = RMT_MODE_TX;
148
- c.gpio_num = gpio_num_t(this->pin_->get_pin());
149
- c.tx_config.loop_en = false;
150
-
151
- if (this->current_carrier_frequency_ == 0 || this->carrier_duty_percent_ == 100) {
152
- c.tx_config.carrier_en = false;
153
- } else {
154
- c.tx_config.carrier_en = true;
155
- c.tx_config.carrier_freq_hz = this->current_carrier_frequency_;
156
- c.tx_config.carrier_duty_percent = this->carrier_duty_percent_;
157
- }
158
-
159
- c.tx_config.idle_output_en = true;
160
- if (!this->inverted_) {
161
- c.tx_config.carrier_level = RMT_CARRIER_LEVEL_HIGH;
162
- c.tx_config.idle_level = RMT_IDLE_LEVEL_LOW;
163
- } else {
164
- c.tx_config.carrier_level = RMT_CARRIER_LEVEL_LOW;
165
- c.tx_config.idle_level = RMT_IDLE_LEVEL_HIGH;
166
- }
167
-
168
- esp_err_t error = rmt_config(&c);
169
- if (error != ESP_OK) {
170
- this->error_code_ = error;
171
- this->error_string_ = "in rmt_config";
172
- this->mark_failed();
173
- return;
174
- }
175
-
176
- if (!this->initialized_) {
177
- error = rmt_driver_install(this->channel_, 0, 0);
178
- if (error != ESP_OK) {
179
- this->error_code_ = error;
180
- if (error == ESP_ERR_INVALID_STATE) {
181
- this->error_string_ = str_sprintf("RMT channel %i is already in use by another component", this->channel_);
182
- } else {
183
- this->error_string_ = "in rmt_driver_install";
184
- }
185
- this->mark_failed();
186
- return;
187
- }
188
- this->initialized_ = true;
189
- }
190
- #endif
191
132
  }
192
133
 
193
134
  void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t send_wait) {
@@ -202,11 +143,7 @@ void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t sen
202
143
  this->rmt_temp_.clear();
203
144
  this->rmt_temp_.reserve((this->temp_.get_data().size() + 1) / 2);
204
145
  uint32_t rmt_i = 0;
205
- #if ESP_IDF_VERSION_MAJOR >= 5
206
146
  rmt_symbol_word_t rmt_item;
207
- #else
208
- rmt_item32_t rmt_item;
209
- #endif
210
147
 
211
148
  for (int32_t val : this->temp_.get_data()) {
212
149
  bool level = val >= 0;
@@ -241,7 +178,6 @@ void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t sen
241
178
  return;
242
179
  }
243
180
  this->transmit_trigger_->trigger();
244
- #if ESP_IDF_VERSION_MAJOR >= 5
245
181
  for (uint32_t i = 0; i < send_times; i++) {
246
182
  rmt_transmit_config_t config;
247
183
  memset(&config, 0, sizeof(config));
@@ -263,19 +199,6 @@ void RemoteTransmitterComponent::send_internal(uint32_t send_times, uint32_t sen
263
199
  if (i + 1 < send_times)
264
200
  delayMicroseconds(send_wait);
265
201
  }
266
- #else
267
- for (uint32_t i = 0; i < send_times; i++) {
268
- esp_err_t error = rmt_write_items(this->channel_, this->rmt_temp_.data(), this->rmt_temp_.size(), true);
269
- if (error != ESP_OK) {
270
- ESP_LOGW(TAG, "rmt_write_items failed: %s", esp_err_to_name(error));
271
- this->status_set_warning();
272
- } else {
273
- this->status_clear_warning();
274
- }
275
- if (i + 1 < send_times)
276
- delayMicroseconds(send_wait);
277
- }
278
- #endif
279
202
  this->complete_trigger_->trigger();
280
203
  }
281
204
 
@@ -24,7 +24,6 @@ class ResistanceSensor : public Component, public sensor::Sensor {
24
24
  this->process_(this->sensor_->state);
25
25
  }
26
26
  void dump_config() override;
27
- float get_setup_priority() const override { return setup_priority::DATA; }
28
27
 
29
28
  protected:
30
29
  void process_(float value);
@@ -167,6 +167,7 @@ async def to_code(config):
167
167
  cg.add_platformio_option("lib_ldf_mode", "chain+")
168
168
  cg.add_platformio_option("board", config[CONF_BOARD])
169
169
  cg.add_build_flag("-DUSE_RP2040")
170
+ cg.set_cpp_standard("gnu++20")
170
171
  cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
171
172
  cg.add_define("ESPHOME_VARIANT", "RP2040")
172
173
 
@@ -0,0 +1,55 @@
1
+ #include "esphome/core/helpers.h"
2
+ #include "esphome/core/defines.h"
3
+
4
+ #ifdef USE_RP2040
5
+
6
+ #include "esphome/core/hal.h"
7
+
8
+ #if defined(USE_WIFI)
9
+ #include <WiFi.h>
10
+ #endif
11
+ #include <hardware/structs/rosc.h>
12
+ #include <hardware/sync.h>
13
+
14
+ namespace esphome {
15
+
16
+ uint32_t random_uint32() {
17
+ uint32_t result = 0;
18
+ for (uint8_t i = 0; i < 32; i++) {
19
+ result <<= 1;
20
+ result |= rosc_hw->randombit;
21
+ }
22
+ return result;
23
+ }
24
+
25
+ bool random_bytes(uint8_t *data, size_t len) {
26
+ while (len-- != 0) {
27
+ uint8_t result = 0;
28
+ for (uint8_t i = 0; i < 8; i++) {
29
+ result <<= 1;
30
+ result |= rosc_hw->randombit;
31
+ }
32
+ *data++ = result;
33
+ }
34
+ return true;
35
+ }
36
+
37
+ // RP2040 doesn't have mutexes, but that shouldn't be an issue as it's single-core and non-preemptive OS.
38
+ Mutex::Mutex() {}
39
+ Mutex::~Mutex() {}
40
+ void Mutex::lock() {}
41
+ bool Mutex::try_lock() { return true; }
42
+ void Mutex::unlock() {}
43
+
44
+ IRAM_ATTR InterruptLock::InterruptLock() { state_ = save_and_disable_interrupts(); }
45
+ IRAM_ATTR InterruptLock::~InterruptLock() { restore_interrupts(state_); }
46
+
47
+ void get_mac_address_raw(uint8_t *mac) { // NOLINT(readability-non-const-parameter)
48
+ #ifdef USE_WIFI
49
+ WiFi.macAddress(mac);
50
+ #endif
51
+ }
52
+
53
+ } // namespace esphome
54
+
55
+ #endif // USE_RP2040
@@ -9,8 +9,8 @@
9
9
  #include <hardware/dma.h>
10
10
  #include <hardware/irq.h>
11
11
  #include <hardware/pio.h>
12
- #include <pico/stdlib.h>
13
12
  #include <pico/sem.h>
13
+ #include <pico/stdlib.h>
14
14
 
15
15
  namespace esphome {
16
16
  namespace rp2040_pio_led_strip {
@@ -44,7 +44,7 @@ void RP2040PIOLEDStripLightOutput::setup() {
44
44
 
45
45
  size_t buffer_size = this->get_buffer_size_();
46
46
 
47
- ExternalRAMAllocator<uint8_t> allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
47
+ RAMAllocator<uint8_t> allocator;
48
48
  this->buf_ = allocator.allocate(buffer_size);
49
49
  if (this->buf_ == nullptr) {
50
50
  ESP_LOGE(TAG, "Failed to allocate buffer of size %u", buffer_size);
@@ -10,10 +10,8 @@ void RpiDpiRgb::setup() {
10
10
  this->reset_display_();
11
11
  esp_lcd_rgb_panel_config_t config{};
12
12
  config.flags.fb_in_psram = 1;
13
- #if ESP_IDF_VERSION_MAJOR >= 5
14
13
  config.bounce_buffer_size_px = this->width_ * 10;
15
14
  config.num_fbs = 1;
16
- #endif // ESP_IDF_VERSION_MAJOR
17
15
  config.timings.h_res = this->width_;
18
16
  config.timings.v_res = this->height_;
19
17
  config.timings.hsync_pulse_width = this->hsync_pulse_width_;
@@ -47,10 +45,8 @@ void RpiDpiRgb::setup() {
47
45
  ESP_LOGCONFIG(TAG, "RPI_DPI_RGB setup complete");
48
46
  }
49
47
  void RpiDpiRgb::loop() {
50
- #if ESP_IDF_VERSION_MAJOR >= 5
51
48
  if (this->handle_ != nullptr)
52
49
  esp_lcd_rgb_panel_restart(this->handle_);
53
- #endif // ESP_IDF_VERSION_MAJOR
54
50
  }
55
51
 
56
52
  void RpiDpiRgb::draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
@@ -57,14 +57,14 @@ def validate_parent_output_config(value):
57
57
  platform = value.get(CONF_PLATFORM)
58
58
  PWM_GOOD = ["esp8266_pwm", "ledc"]
59
59
  PWM_BAD = [
60
- "ac_dimmer ",
60
+ "ac_dimmer",
61
61
  "esp32_dac",
62
- "slow_pwm",
63
62
  "mcp4725",
64
- "pca9685",
65
- "tlc59208f",
66
63
  "my9231",
64
+ "pca9685",
65
+ "slow_pwm",
67
66
  "sm16716",
67
+ "tlc59208f",
68
68
  ]
69
69
 
70
70
  if platform in PWM_BAD:
@@ -142,8 +142,10 @@ void Rtttl::stop() {
142
142
  }
143
143
 
144
144
  void Rtttl::loop() {
145
- if (this->note_duration_ == 0 || this->state_ == State::STATE_STOPPED)
145
+ if (this->note_duration_ == 0 || this->state_ == State::STATE_STOPPED) {
146
+ this->disable_loop();
146
147
  return;
148
+ }
147
149
 
148
150
  #ifdef USE_SPEAKER
149
151
  if (this->speaker_ != nullptr) {
@@ -369,6 +371,7 @@ void Rtttl::finish_() {
369
371
  ESP_LOGD(TAG, "Playback finished");
370
372
  }
371
373
 
374
+ #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_DEBUG
372
375
  static const LogString *state_to_string(State state) {
373
376
  switch (state) {
374
377
  case STATE_STOPPED:
@@ -385,12 +388,18 @@ static const LogString *state_to_string(State state) {
385
388
  return LOG_STR("UNKNOWN");
386
389
  }
387
390
  };
391
+ #endif
388
392
 
389
393
  void Rtttl::set_state_(State state) {
390
394
  State old_state = this->state_;
391
395
  this->state_ = state;
392
396
  ESP_LOGV(TAG, "State changed from %s to %s", LOG_STR_ARG(state_to_string(old_state)),
393
397
  LOG_STR_ARG(state_to_string(state)));
398
+
399
+ // Clear loop_done when transitioning from STOPPED to any other state
400
+ if (old_state == State::STATE_STOPPED && state != State::STATE_STOPPED) {
401
+ this->enable_loop();
402
+ }
394
403
  }
395
404
 
396
405
  } // namespace rtttl
@@ -48,7 +48,6 @@ class RuuviTag : public Component, public esp32_ble_tracker::ESPBTDeviceListener
48
48
  }
49
49
 
50
50
  void dump_config() override;
51
- float get_setup_priority() const override { return setup_priority::DATA; }
52
51
  void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
53
52
  void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
54
53
  void set_pressure(sensor::Sensor *pressure) { pressure_ = pressure; }
@@ -42,6 +42,8 @@ void SafeModeComponent::loop() {
42
42
  ESP_LOGI(TAG, "Boot seems successful; resetting boot loop counter");
43
43
  this->clean_rtc();
44
44
  this->boot_successful_ = true;
45
+ // Disable loop since we no longer need to check
46
+ this->disable_loop();
45
47
  }
46
48
  }
47
49
 
@@ -33,12 +33,15 @@ class SafeModeComponent : public Component {
33
33
  void write_rtc_(uint32_t val);
34
34
  uint32_t read_rtc_();
35
35
 
36
- bool boot_successful_{false}; ///< set to true after boot is considered successful
36
+ // Group all 4-byte aligned members together to avoid padding
37
37
  uint32_t safe_mode_boot_is_good_after_{60000}; ///< The amount of time after which the boot is considered successful
38
38
  uint32_t safe_mode_enable_time_{60000}; ///< The time safe mode should remain active for
39
39
  uint32_t safe_mode_rtc_value_{0};
40
40
  uint32_t safe_mode_start_time_{0}; ///< stores when safe mode was enabled
41
+ // Group 1-byte members together to minimize padding
42
+ bool boot_successful_{false}; ///< set to true after boot is considered successful
41
43
  uint8_t safe_mode_num_attempts_{0};
44
+ // Larger objects at the end
42
45
  ESPPreferenceObject rtc_;
43
46
  CallbackManager<void()> safe_mode_callback_{};
44
47
 
@@ -26,7 +26,6 @@ class SCD30Component : public Component, public sensirion_common::SensirionI2CDe
26
26
  void setup() override;
27
27
  void update();
28
28
  void dump_config() override;
29
- float get_setup_priority() const override { return setup_priority::DATA; }
30
29
 
31
30
  protected:
32
31
  bool is_data_ready_();
@@ -3,6 +3,8 @@ import esphome.codegen as cg
3
3
  from esphome.components import i2c, sensirion_common, sensor
4
4
  import esphome.config_validation as cv
5
5
  from esphome.const import (
6
+ CONF_AMBIENT_PRESSURE_COMPENSATION,
7
+ CONF_AUTOMATIC_SELF_CALIBRATION,
6
8
  CONF_CO2,
7
9
  CONF_HUMIDITY,
8
10
  CONF_ID,
@@ -18,8 +20,6 @@ from esphome.const import (
18
20
  UNIT_CELSIUS,
19
21
  UNIT_PARTS_PER_MILLION,
20
22
  UNIT_PERCENT,
21
- CONF_AUTOMATIC_SELF_CALIBRATION,
22
- CONF_AMBIENT_PRESSURE_COMPENSATION,
23
23
  )
24
24
 
25
25
  DEPENDENCIES = ["i2c"]