esphome 2025.6.2__py3-none-any.whl → 2025.7.0__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 (648) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +10 -4
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as3935_spi/as3935_spi.h +0 -2
  42. esphome/components/as5600/as5600.h +0 -1
  43. esphome/components/async_tcp/__init__.py +14 -5
  44. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  45. esphome/components/atm90e32/atm90e32.cpp +2 -1
  46. esphome/components/audio/audio_decoder.cpp +1 -1
  47. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  48. esphome/components/b_parasite/b_parasite.h +0 -1
  49. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  50. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  51. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  52. esphome/components/bh1750/bh1750.cpp +5 -5
  53. esphome/components/binary_sensor/__init__.py +82 -5
  54. esphome/components/binary_sensor/automation.h +19 -1
  55. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  56. esphome/components/binary_sensor/binary_sensor.h +11 -25
  57. esphome/components/binary_sensor/filter.cpp +29 -24
  58. esphome/components/binary_sensor/filter.h +20 -10
  59. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  63. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  64. esphome/components/ble_client/switch/ble_switch.h +0 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  66. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  67. esphome/components/ble_presence/ble_presence_device.h +0 -1
  68. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  69. esphome/components/ble_scanner/ble_scanner.h +0 -1
  70. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  72. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  73. esphome/components/bme680/sensor.py +1 -1
  74. esphome/components/bmp581/bmp581.h +0 -2
  75. esphome/components/button/__init__.py +5 -2
  76. esphome/components/camera/__init__.py +1 -0
  77. esphome/components/camera/camera.cpp +22 -0
  78. esphome/components/camera/camera.h +80 -0
  79. esphome/components/canbus/__init__.py +1 -0
  80. esphome/components/cap1188/cap1188.h +0 -1
  81. esphome/components/captive_portal/__init__.py +12 -2
  82. esphome/components/captive_portal/captive_portal.cpp +12 -2
  83. esphome/components/captive_portal/captive_portal.h +5 -2
  84. esphome/components/ccs811/ccs811.h +0 -2
  85. esphome/components/climate/__init__.py +5 -2
  86. esphome/components/cm1106/sensor.py +2 -2
  87. esphome/components/const/__init__.py +2 -0
  88. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  89. esphome/components/copy/button/copy_button.h +0 -1
  90. esphome/components/copy/cover/copy_cover.h +0 -1
  91. esphome/components/copy/fan/copy_fan.h +0 -1
  92. esphome/components/copy/lock/copy_lock.h +0 -1
  93. esphome/components/copy/number/copy_number.h +0 -1
  94. esphome/components/copy/select/copy_select.h +0 -1
  95. esphome/components/copy/sensor/copy_sensor.h +0 -1
  96. esphome/components/copy/switch/copy_switch.h +0 -1
  97. esphome/components/copy/text/copy_text.h +0 -1
  98. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  99. esphome/components/cover/__init__.py +5 -2
  100. esphome/components/cs5460a/cs5460a.h +0 -1
  101. esphome/components/datetime/__init__.py +4 -2
  102. esphome/components/debug/__init__.py +20 -0
  103. esphome/components/debug/debug_esp32.cpp +2 -0
  104. esphome/components/deep_sleep/__init__.py +43 -9
  105. esphome/components/demo/__init__.py +2 -2
  106. esphome/components/display/display.cpp +4 -3
  107. esphome/components/display/display.h +0 -2
  108. esphome/components/display/display_buffer.cpp +1 -1
  109. esphome/components/ds2484/__init__.py +1 -0
  110. esphome/components/ds2484/ds2484.cpp +209 -0
  111. esphome/components/ds2484/ds2484.h +43 -0
  112. esphome/components/ds2484/one_wire.py +37 -0
  113. esphome/components/duty_time/duty_time_sensor.h +0 -1
  114. esphome/components/ens160_base/ens160_base.h +0 -1
  115. esphome/components/es7210/es7210.h +0 -1
  116. esphome/components/es7243e/es7243e.h +0 -1
  117. esphome/components/es8156/es8156.h +0 -1
  118. esphome/components/es8311/es8311.h +0 -1
  119. esphome/components/es8388/es8388.h +0 -1
  120. esphome/components/esp32/__init__.py +103 -135
  121. esphome/components/esp32/core.cpp +0 -4
  122. esphome/components/esp32/gpio.h +1 -1
  123. esphome/components/esp32/helpers.cpp +69 -0
  124. esphome/components/esp32_ble/ble.cpp +5 -6
  125. esphome/components/esp32_ble/ble.h +29 -14
  126. esphome/components/esp32_ble/ble_event.h +6 -6
  127. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  128. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  129. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  131. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  132. esphome/components/esp32_camera/__init__.py +112 -98
  133. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  134. esphome/components/esp32_camera/esp32_camera.h +35 -30
  135. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  136. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  137. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  138. esphome/components/esp32_hall/sensor.py +2 -21
  139. esphome/components/esp32_hosted/__init__.py +101 -0
  140. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  141. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  142. esphome/components/esp32_rmt/__init__.py +0 -58
  143. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  144. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  145. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  146. esphome/components/esp32_touch/esp32_touch.h +174 -28
  147. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  148. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  149. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  150. esphome/components/esp8266/__init__.py +2 -0
  151. esphome/components/esp8266/gpio.cpp +10 -10
  152. esphome/components/esp8266/helpers.cpp +31 -0
  153. esphome/components/esp_ldo/__init__.py +10 -8
  154. esphome/components/esp_ldo/esp_ldo.h +3 -0
  155. esphome/components/esphome/ota/__init__.py +1 -0
  156. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  157. esphome/components/ethernet/__init__.py +42 -23
  158. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  159. esphome/components/ethernet/ethernet_component.cpp +69 -29
  160. esphome/components/ethernet/ethernet_component.h +18 -10
  161. esphome/components/event/__init__.py +5 -2
  162. esphome/components/ezo/ezo.h +0 -1
  163. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  164. esphome/components/fan/__init__.py +5 -2
  165. esphome/components/fan/fan.cpp +4 -0
  166. esphome/components/feedback/feedback_cover.h +0 -1
  167. esphome/components/font/__init__.py +92 -82
  168. esphome/components/font/font.cpp +9 -2
  169. esphome/components/font/font.h +20 -5
  170. esphome/components/fs3000/fs3000.h +0 -1
  171. esphome/components/gcja5/gcja5.h +0 -1
  172. esphome/components/gl_r01_i2c/__init__.py +0 -0
  173. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  174. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  175. esphome/components/gl_r01_i2c/sensor.py +36 -0
  176. esphome/components/gp8403/gp8403.h +0 -1
  177. esphome/components/gpio/binary_sensor/__init__.py +39 -1
  178. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  179. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  180. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  181. esphome/components/he60r/he60r.h +0 -1
  182. esphome/components/heatpumpir/climate.py +2 -1
  183. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  184. esphome/components/heatpumpir/heatpumpir.h +1 -0
  185. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  186. esphome/components/host/__init__.py +3 -1
  187. esphome/components/host/helpers.cpp +57 -0
  188. esphome/components/http_request/__init__.py +19 -1
  189. esphome/components/http_request/http_request.h +1 -1
  190. esphome/components/http_request/http_request_arduino.cpp +0 -1
  191. esphome/components/http_request/http_request_arduino.h +1 -0
  192. esphome/components/http_request/http_request_idf.cpp +0 -1
  193. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  194. esphome/components/http_request/update/http_request_update.cpp +35 -16
  195. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  196. esphome/components/hydreon_rgxx/sensor.py +1 -1
  197. esphome/components/i2c/__init__.py +23 -11
  198. esphome/components/i2c/i2c_bus.h +8 -1
  199. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  200. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  201. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  202. esphome/components/i2c_device/i2c_device.h +0 -1
  203. esphome/components/i2s_audio/__init__.py +2 -10
  204. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  205. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  206. esphome/components/i2s_audio/speaker/__init__.py +1 -1
  207. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  208. esphome/components/iaqcore/iaqcore.h +0 -2
  209. esphome/components/image/__init__.py +123 -24
  210. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  211. esphome/components/ina219/ina219.cpp +7 -0
  212. esphome/components/ina219/ina219.h +1 -0
  213. esphome/components/ina260/ina260.h +0 -2
  214. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  215. esphome/components/inkplate6/display.py +15 -0
  216. esphome/components/inkplate6/inkplate.cpp +2 -2
  217. esphome/components/integration/integration_sensor.h +0 -1
  218. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  219. esphome/components/internal_temperature/sensor.py +0 -26
  220. esphome/components/interval/interval.h +0 -2
  221. esphome/components/json/__init__.py +1 -1
  222. esphome/components/json/json_util.cpp +56 -63
  223. esphome/components/ld2410/button/__init__.py +3 -3
  224. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  225. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  226. esphome/components/ld2410/ld2410.cpp +421 -268
  227. esphome/components/ld2410/ld2410.h +44 -146
  228. esphome/components/ld2410/number/__init__.py +2 -2
  229. esphome/components/ld2410/sensor.py +1 -1
  230. esphome/components/ld2410/switch/__init__.py +1 -1
  231. esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
  232. esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
  233. esphome/components/ld2420/ld2420.cpp +252 -147
  234. esphome/components/ld2420/ld2420.h +52 -126
  235. esphome/components/ld2420/number/__init__.py +2 -2
  236. esphome/components/ld2420/number/gate_config_number.cpp +1 -1
  237. esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
  238. esphome/components/ld2420/sensor/__init__.py +6 -2
  239. esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
  240. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  241. esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
  242. esphome/components/ld2450/button/__init__.py +3 -3
  243. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  244. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  245. esphome/components/ld2450/ld2450.cpp +384 -232
  246. esphome/components/ld2450/ld2450.h +60 -69
  247. esphome/components/ld2450/switch/__init__.py +1 -1
  248. esphome/components/ledc/ledc_output.cpp +1 -63
  249. esphome/components/libretiny/__init__.py +5 -3
  250. esphome/components/libretiny/const.py +5 -0
  251. esphome/components/libretiny/generate_components.py +1 -0
  252. esphome/components/libretiny/helpers.cpp +35 -0
  253. esphome/components/libretiny/lt_component.cpp +5 -3
  254. esphome/components/light/__init__.py +4 -2
  255. esphome/components/light/addressable_light.h +3 -3
  256. esphome/components/light/light_call.cpp +180 -243
  257. esphome/components/light/light_call.h +72 -20
  258. esphome/components/light/light_color_values.h +14 -14
  259. esphome/components/light/light_json_schema.cpp +17 -16
  260. esphome/components/light/light_state.h +15 -13
  261. esphome/components/light/transformers.h +2 -2
  262. esphome/components/ln882x/__init__.py +52 -0
  263. esphome/components/ln882x/boards.py +285 -0
  264. esphome/components/lock/__init__.py +5 -2
  265. esphome/components/logger/__init__.py +40 -3
  266. esphome/components/logger/logger.cpp +47 -12
  267. esphome/components/logger/logger.h +80 -49
  268. esphome/components/logger/logger_esp32.cpp +3 -3
  269. esphome/components/lps22/__init__.py +0 -0
  270. esphome/components/lps22/lps22.cpp +75 -0
  271. esphome/components/lps22/lps22.h +27 -0
  272. esphome/components/lps22/sensor.py +58 -0
  273. esphome/components/ltr390/ltr390.h +0 -1
  274. esphome/components/ltr501/ltr501.h +0 -1
  275. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  276. esphome/components/lvgl/__init__.py +1 -1
  277. esphome/components/lvgl/schemas.py +66 -6
  278. esphome/components/lvgl/styles.py +24 -16
  279. esphome/components/lvgl/widgets/__init__.py +12 -2
  280. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  281. esphome/components/lvgl/widgets/meter.py +20 -13
  282. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  283. esphome/components/max9611/max9611.h +0 -1
  284. esphome/components/mcp23016/__init__.py +1 -1
  285. esphome/components/mcp23xxx_base/__init__.py +1 -1
  286. esphome/components/mcp4461/__init__.py +1 -1
  287. esphome/components/mcp4461/output/__init__.py +3 -2
  288. esphome/components/mcp9600/mcp9600.h +0 -2
  289. esphome/components/md5/md5.cpp +3 -3
  290. esphome/components/md5/md5.h +1 -6
  291. esphome/components/mdns/__init__.py +22 -11
  292. esphome/components/media_player/__init__.py +4 -3
  293. esphome/components/micro_wake_word/__init__.py +1 -5
  294. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  295. esphome/components/microphone/microphone.cpp +7 -9
  296. esphome/components/microphone/microphone.h +0 -2
  297. esphome/components/mipi_spi/display.py +1 -0
  298. esphome/components/mmc5603/mmc5603.cpp +1 -1
  299. esphome/components/modbus/modbus.cpp +33 -15
  300. esphome/components/modbus/modbus.h +9 -0
  301. esphome/components/modbus_controller/__init__.py +42 -10
  302. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  303. esphome/components/modbus_controller/modbus_controller.h +61 -7
  304. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  305. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  306. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  307. esphome/components/mqtt/__init__.py +16 -0
  308. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
  309. esphome/components/mqtt/mqtt_backend.h +2 -1
  310. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  311. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  312. esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
  313. esphome/components/mqtt/mqtt_button.cpp +4 -1
  314. esphome/components/mqtt/mqtt_client.cpp +17 -9
  315. esphome/components/mqtt/mqtt_client.h +8 -3
  316. esphome/components/mqtt/mqtt_climate.cpp +6 -4
  317. esphome/components/mqtt/mqtt_component.cpp +3 -1
  318. esphome/components/mqtt/mqtt_cover.cpp +1 -0
  319. esphome/components/mqtt/mqtt_date.cpp +4 -3
  320. esphome/components/mqtt/mqtt_datetime.cpp +7 -6
  321. esphome/components/mqtt/mqtt_event.cpp +6 -3
  322. esphome/components/mqtt/mqtt_fan.cpp +1 -0
  323. esphome/components/mqtt/mqtt_light.cpp +8 -4
  324. esphome/components/mqtt/mqtt_lock.cpp +3 -1
  325. esphome/components/mqtt/mqtt_number.cpp +1 -0
  326. esphome/components/mqtt/mqtt_select.cpp +2 -1
  327. esphome/components/mqtt/mqtt_sensor.cpp +3 -1
  328. esphome/components/mqtt/mqtt_switch.cpp +3 -1
  329. esphome/components/mqtt/mqtt_text.cpp +1 -0
  330. esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
  331. esphome/components/mqtt/mqtt_time.cpp +4 -3
  332. esphome/components/mqtt/mqtt_update.cpp +1 -0
  333. esphome/components/mqtt/mqtt_valve.cpp +3 -1
  334. esphome/components/ms8607/ms8607.cpp +1 -1
  335. esphome/components/ms8607/ms8607.h +0 -1
  336. esphome/components/neopixelbus/light.py +4 -1
  337. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  338. esphome/components/network/__init__.py +4 -1
  339. esphome/components/network/ip_address.h +1 -0
  340. esphome/components/nextion/__init__.py +16 -0
  341. esphome/components/nextion/base_component.py +1 -0
  342. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  343. esphome/components/nextion/display.py +14 -4
  344. esphome/components/nextion/nextion.cpp +166 -101
  345. esphome/components/nextion/nextion.h +84 -53
  346. esphome/components/nextion/nextion_commands.cpp +11 -10
  347. esphome/components/nextion/nextion_component.cpp +28 -28
  348. esphome/components/nextion/nextion_component.h +53 -18
  349. esphome/components/nextion/nextion_component_base.h +3 -0
  350. esphome/components/nextion/nextion_upload.cpp +36 -0
  351. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  352. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  353. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  354. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  355. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  356. esphome/components/nfc/nfc.cpp +3 -22
  357. esphome/components/nfc/nfc.h +3 -3
  358. esphome/components/number/__init__.py +5 -2
  359. esphome/components/online_image/__init__.py +9 -1
  360. esphome/components/online_image/online_image.cpp +17 -7
  361. esphome/components/online_image/online_image.h +10 -2
  362. esphome/components/opentherm/opentherm.cpp +7 -12
  363. esphome/components/opentherm/output/output.cpp +1 -1
  364. esphome/components/openthread/__init__.py +47 -40
  365. esphome/components/openthread/const.py +1 -0
  366. esphome/components/openthread/openthread_esp.cpp +27 -5
  367. esphome/components/opt3001/__init__.py +0 -0
  368. esphome/components/opt3001/opt3001.cpp +122 -0
  369. esphome/components/opt3001/opt3001.h +27 -0
  370. esphome/components/opt3001/sensor.py +35 -0
  371. esphome/components/ota/__init__.py +17 -0
  372. esphome/components/ota/ota_backend.h +27 -1
  373. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  374. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  375. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  376. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  377. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  378. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  379. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  380. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  381. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  382. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  383. esphome/components/packages/__init__.py +5 -2
  384. esphome/components/packet_transport/binary_sensor.py +61 -4
  385. esphome/components/packet_transport/packet_transport.cpp +34 -1
  386. esphome/components/packet_transport/packet_transport.h +11 -5
  387. esphome/components/pcf8574/__init__.py +1 -1
  388. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  389. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  390. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  391. esphome/components/pmsa003i/pmsa003i.h +0 -1
  392. esphome/components/pmsx003/pmsx003.h +0 -1
  393. esphome/components/pn7150/pn7150.cpp +7 -7
  394. esphome/components/pn7150/pn7150.h +0 -1
  395. esphome/components/pn7160/pn7160.cpp +7 -7
  396. esphome/components/pn7160/pn7160.h +0 -1
  397. esphome/components/preferences/syncer.h +2 -0
  398. esphome/components/prometheus/prometheus_handler.h +1 -1
  399. esphome/components/psram/psram.cpp +0 -20
  400. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  401. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  402. esphome/components/pulse_width/pulse_width.h +0 -1
  403. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  404. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  405. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  406. esphome/components/qr_code/__init__.py +13 -10
  407. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  408. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  409. esphome/components/rc522/rc522.h +0 -1
  410. esphome/components/rdm6300/rdm6300.h +0 -2
  411. esphome/components/remote_base/__init__.py +7 -5
  412. esphome/components/remote_base/remote_base.cpp +24 -21
  413. esphome/components/remote_base/remote_base.h +3 -26
  414. esphome/components/remote_receiver/__init__.py +40 -46
  415. esphome/components/remote_receiver/remote_receiver.h +4 -18
  416. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  417. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  418. esphome/components/remote_transmitter/__init__.py +42 -43
  419. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  420. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  421. esphome/components/resistance/resistance_sensor.h +0 -1
  422. esphome/components/rp2040/__init__.py +2 -0
  423. esphome/components/rp2040/helpers.cpp +55 -0
  424. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  425. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  426. esphome/components/rtttl/__init__.py +4 -4
  427. esphome/components/rtttl/rtttl.cpp +10 -1
  428. esphome/components/ruuvitag/ruuvitag.h +0 -1
  429. esphome/components/safe_mode/safe_mode.cpp +2 -0
  430. esphome/components/safe_mode/safe_mode.h +4 -1
  431. esphome/components/scd30/scd30.h +0 -1
  432. esphome/components/scd30/sensor.py +2 -2
  433. esphome/components/scd4x/scd4x.cpp +61 -54
  434. esphome/components/scd4x/scd4x.h +17 -15
  435. esphome/components/scd4x/sensor.py +4 -4
  436. esphome/components/script/script.h +0 -2
  437. esphome/components/sdp3x/sensor.py +1 -1
  438. esphome/components/select/__init__.py +5 -2
  439. esphome/components/sen5x/sen5x.h +0 -1
  440. esphome/components/senseair/senseair.h +0 -1
  441. esphome/components/sensor/__init__.py +4 -2
  442. esphome/components/sensor/filter.cpp +1 -1
  443. esphome/components/sensor/sensor.cpp +12 -6
  444. esphome/components/sensor/sensor.h +13 -5
  445. esphome/components/servo/servo.cpp +2 -2
  446. esphome/components/servo/servo.h +0 -1
  447. esphome/components/sfa30/sfa30.h +0 -1
  448. esphome/components/sgp30/sgp30.h +0 -1
  449. esphome/components/sgp4x/sgp4x.h +0 -1
  450. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  451. esphome/components/sht4x/sht4x.h +0 -1
  452. esphome/components/sm300d2/sm300d2.h +0 -2
  453. esphome/components/smt100/sensor.py +8 -4
  454. esphome/components/smt100/smt100.cpp +5 -5
  455. esphome/components/smt100/smt100.h +3 -3
  456. esphome/components/sn74hc595/__init__.py +1 -1
  457. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  458. esphome/components/sntp/sntp_component.cpp +9 -3
  459. esphome/components/sntp/time.py +2 -0
  460. esphome/components/socket/__init__.py +17 -0
  461. esphome/components/spi/__init__.py +27 -6
  462. esphome/components/spi/spi.cpp +3 -2
  463. esphome/components/spi/spi.h +9 -3
  464. esphome/components/spi/spi_arduino.cpp +3 -5
  465. esphome/components/spi/spi_esp_idf.cpp +40 -21
  466. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  467. esphome/components/sps30/sps30.h +0 -1
  468. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  469. esphome/components/st7701s/st7701s.cpp +0 -4
  470. esphome/components/status/status_binary_sensor.h +0 -2
  471. esphome/components/substitutions/__init__.py +81 -21
  472. esphome/components/substitutions/jinja.py +99 -0
  473. esphome/components/sun/sun.cpp +3 -4
  474. esphome/components/switch/__init__.py +5 -2
  475. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  476. esphome/components/sx126x/__init__.py +317 -0
  477. esphome/components/sx126x/automation.h +62 -0
  478. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  479. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  480. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  481. esphome/components/sx126x/sx126x.cpp +523 -0
  482. esphome/components/sx126x/sx126x.h +140 -0
  483. esphome/components/sx126x/sx126x_reg.h +163 -0
  484. esphome/components/sx127x/__init__.py +325 -0
  485. esphome/components/sx127x/automation.h +62 -0
  486. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  487. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  488. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  489. esphome/components/sx127x/sx127x.cpp +498 -0
  490. esphome/components/sx127x/sx127x.h +128 -0
  491. esphome/components/sx127x/sx127x_reg.h +295 -0
  492. esphome/components/syslog/esphome_syslog.cpp +5 -3
  493. esphome/components/syslog/esphome_syslog.h +1 -1
  494. esphome/components/tca9555/__init__.py +1 -1
  495. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  496. esphome/components/text/__init__.py +5 -2
  497. esphome/components/text_sensor/__init__.py +5 -2
  498. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  499. esphome/components/thermostat/thermostat_climate.h +43 -39
  500. esphome/components/time/__init__.py +16 -2
  501. esphome/components/time/real_time_clock.cpp +4 -0
  502. esphome/components/time/real_time_clock.h +5 -1
  503. esphome/components/tlc5971/tlc5971.cpp +4 -1
  504. esphome/components/tmp1075/tmp1075.h +0 -2
  505. esphome/components/tof10120/tof10120_sensor.h +0 -1
  506. esphome/components/tormatic/tormatic_cover.h +0 -1
  507. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  508. esphome/components/tsl2591/tsl2591.cpp +1 -1
  509. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  510. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  511. esphome/components/tx20/tx20.cpp +2 -2
  512. esphome/components/uart/__init__.py +18 -0
  513. esphome/components/uart/uart_component_esp_idf.cpp +1 -5
  514. esphome/components/update/__init__.py +5 -2
  515. esphome/components/update/update_entity.h +8 -0
  516. esphome/components/usb_host/__init__.py +5 -2
  517. esphome/components/usb_host/usb_host_client.cpp +10 -10
  518. esphome/components/usb_uart/cp210x.cpp +1 -1
  519. esphome/components/usb_uart/usb_uart.cpp +41 -44
  520. esphome/components/usb_uart/usb_uart.h +4 -3
  521. esphome/components/valve/__init__.py +5 -2
  522. esphome/components/vbus/vbus.h +0 -1
  523. esphome/components/veml3235/veml3235.h +0 -1
  524. esphome/components/veml7700/veml7700.h +0 -1
  525. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  526. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  527. esphome/components/watchdog/watchdog.cpp +0 -4
  528. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  529. esphome/components/web_server/__init__.py +34 -19
  530. esphome/components/web_server/ota/__init__.py +32 -0
  531. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  532. esphome/components/web_server/ota/ota_web_server.h +26 -0
  533. esphome/components/web_server/web_server.cpp +324 -439
  534. esphome/components/web_server/web_server.h +33 -23
  535. esphome/components/web_server/web_server_v1.cpp +4 -5
  536. esphome/components/web_server_base/__init__.py +5 -2
  537. esphome/components/web_server_base/web_server_base.cpp +2 -94
  538. esphome/components/web_server_base/web_server_base.h +5 -25
  539. esphome/components/web_server_idf/multipart.cpp +254 -0
  540. esphome/components/web_server_idf/multipart.h +86 -0
  541. esphome/components/web_server_idf/utils.cpp +32 -0
  542. esphome/components/web_server_idf/utils.h +10 -0
  543. esphome/components/web_server_idf/web_server_idf.cpp +164 -16
  544. esphome/components/web_server_idf/web_server_idf.h +11 -10
  545. esphome/components/wiegand/wiegand.cpp +2 -2
  546. esphome/components/wifi/__init__.py +18 -0
  547. esphome/components/wifi/wifi_component.cpp +17 -22
  548. esphome/components/wifi/wifi_component.h +27 -23
  549. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  550. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  551. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  552. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  553. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  554. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  555. esphome/components/wireguard/__init__.py +2 -11
  556. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  557. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  558. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  559. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  560. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  561. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  562. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  563. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  564. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  565. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  566. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  567. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  568. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  569. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  570. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  571. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  572. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  573. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  574. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  575. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  576. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  577. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  578. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  579. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  580. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  581. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  582. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  583. esphome/components/zyaura/zyaura.h +0 -1
  584. esphome/config.py +88 -22
  585. esphome/config_helpers.py +74 -1
  586. esphome/config_validation.py +12 -1
  587. esphome/const.py +65 -10
  588. esphome/core/__init__.py +18 -2
  589. esphome/core/application.cpp +169 -10
  590. esphome/core/application.h +145 -165
  591. esphome/core/area.h +19 -0
  592. esphome/core/automation.h +58 -9
  593. esphome/core/color.cpp +3 -5
  594. esphome/core/color.h +16 -16
  595. esphome/core/component.cpp +156 -22
  596. esphome/core/component.h +98 -4
  597. esphome/core/component_iterator.cpp +11 -9
  598. esphome/core/component_iterator.h +12 -10
  599. esphome/core/config.py +155 -6
  600. esphome/core/controller.cpp +4 -2
  601. esphome/core/controller.h +1 -1
  602. esphome/core/datatypes.h +2 -2
  603. esphome/core/defines.h +17 -2
  604. esphome/core/device.h +20 -0
  605. esphome/core/entity_base.cpp +20 -15
  606. esphome/core/entity_base.h +76 -0
  607. esphome/core/entity_helpers.py +168 -1
  608. esphome/core/event_pool.h +81 -0
  609. esphome/core/helpers.cpp +75 -230
  610. esphome/core/helpers.h +165 -105
  611. esphome/core/lock_free_queue.h +151 -0
  612. esphome/core/log.cpp +2 -2
  613. esphome/core/log.h +2 -0
  614. esphome/core/optional.h +5 -0
  615. esphome/core/ring_buffer.cpp +2 -2
  616. esphome/core/scheduler.cpp +275 -103
  617. esphome/core/scheduler.h +154 -17
  618. esphome/core/time.cpp +5 -5
  619. esphome/core/time.h +5 -5
  620. esphome/cpp_generator.py +17 -0
  621. esphome/cpp_helpers.py +0 -22
  622. esphome/cpp_types.py +3 -1
  623. esphome/dashboard/entries.py +1 -1
  624. esphome/dashboard/util/text.py +5 -21
  625. esphome/dashboard/web_server.py +9 -1
  626. esphome/helpers.py +47 -0
  627. esphome/loader.py +15 -1
  628. esphome/pins.py +14 -8
  629. esphome/platformio_api.py +2 -0
  630. esphome/wizard.py +17 -4
  631. esphome/writer.py +44 -3
  632. esphome/yaml_util.py +0 -2
  633. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
  634. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/RECORD +639 -580
  635. esphome/components/api/api_pb2_size.h +0 -361
  636. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  637. esphome/components/esp32_ble/queue.h +0 -85
  638. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  639. esphome/components/esp32_hall/esp32_hall.h +0 -23
  640. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  641. esphome/components/ld2410/button/reset_button.cpp +0 -9
  642. esphome/components/ld2450/button/reset_button.cpp +0 -9
  643. esphome/components/openthread/tlv.py +0 -65
  644. /esphome/{dashboard/enum.py → enum.py} +0 -0
  645. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
  646. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
  647. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
  648. {esphome-2025.6.2.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,285 @@
1
+ # This file was auto-generated by libretiny/generate_components.py
2
+ # Do not modify its contents.
3
+
4
+ from esphome.components.libretiny.const import FAMILY_LN882H
5
+
6
+ LN882X_BOARDS = {
7
+ "wl2s": {
8
+ "name": "WL2S Wi-Fi/BLE Module",
9
+ "family": FAMILY_LN882H,
10
+ },
11
+ "ln-02": {
12
+ "name": "LN-02 Wi-Fi/BLE Module",
13
+ "family": FAMILY_LN882H,
14
+ },
15
+ "generic-ln882hki": {
16
+ "name": "Generic - LN882HKI",
17
+ "family": FAMILY_LN882H,
18
+ },
19
+ }
20
+
21
+ LN882X_BOARD_PINS = {
22
+ "wl2s": {
23
+ "WIRE0_SCL_0": 7,
24
+ "WIRE0_SCL_1": 12,
25
+ "WIRE0_SCL_2": 3,
26
+ "WIRE0_SCL_3": 10,
27
+ "WIRE0_SCL_4": 2,
28
+ "WIRE0_SCL_5": 0,
29
+ "WIRE0_SCL_6": 19,
30
+ "WIRE0_SCL_7": 11,
31
+ "WIRE0_SCL_8": 9,
32
+ "WIRE0_SCL_9": 24,
33
+ "WIRE0_SCL_10": 25,
34
+ "WIRE0_SCL_11": 5,
35
+ "WIRE0_SCL_12": 1,
36
+ "WIRE0_SDA_0": 7,
37
+ "WIRE0_SDA_1": 12,
38
+ "WIRE0_SDA_2": 3,
39
+ "WIRE0_SDA_3": 10,
40
+ "WIRE0_SDA_4": 2,
41
+ "WIRE0_SDA_5": 0,
42
+ "WIRE0_SDA_6": 19,
43
+ "WIRE0_SDA_7": 11,
44
+ "WIRE0_SDA_8": 9,
45
+ "WIRE0_SDA_9": 24,
46
+ "WIRE0_SDA_10": 25,
47
+ "WIRE0_SDA_11": 5,
48
+ "WIRE0_SDA_12": 1,
49
+ "SERIAL0_RX": 3,
50
+ "SERIAL0_TX": 2,
51
+ "SERIAL1_RX": 24,
52
+ "SERIAL1_TX": 25,
53
+ "ADC2": 0,
54
+ "ADC3": 1,
55
+ "ADC5": 19,
56
+ "PA00": 0,
57
+ "PA0": 0,
58
+ "PA01": 1,
59
+ "PA1": 1,
60
+ "PA02": 2,
61
+ "PA2": 2,
62
+ "PA03": 3,
63
+ "PA3": 3,
64
+ "PA05": 5,
65
+ "PA5": 5,
66
+ "PA07": 7,
67
+ "PA7": 7,
68
+ "PA09": 9,
69
+ "PA9": 9,
70
+ "PA10": 10,
71
+ "PA11": 11,
72
+ "PA12": 12,
73
+ "PB03": 19,
74
+ "PB3": 19,
75
+ "PB08": 24,
76
+ "PB8": 24,
77
+ "PB09": 25,
78
+ "PB9": 25,
79
+ "RX0": 3,
80
+ "RX1": 24,
81
+ "SCL0": 1,
82
+ "SDA0": 1,
83
+ "TX0": 2,
84
+ "TX1": 25,
85
+ "D0": 7,
86
+ "D1": 12,
87
+ "D2": 3,
88
+ "D3": 10,
89
+ "D4": 2,
90
+ "D5": 0,
91
+ "D6": 19,
92
+ "D7": 11,
93
+ "D8": 9,
94
+ "D9": 24,
95
+ "D10": 25,
96
+ "D11": 5,
97
+ "D12": 1,
98
+ "A0": 0,
99
+ "A1": 19,
100
+ "A2": 1,
101
+ },
102
+ "ln-02": {
103
+ "WIRE0_SCL_0": 11,
104
+ "WIRE0_SCL_1": 19,
105
+ "WIRE0_SCL_2": 3,
106
+ "WIRE0_SCL_3": 24,
107
+ "WIRE0_SCL_4": 2,
108
+ "WIRE0_SCL_5": 25,
109
+ "WIRE0_SCL_6": 1,
110
+ "WIRE0_SCL_7": 0,
111
+ "WIRE0_SCL_8": 9,
112
+ "WIRE0_SDA_0": 11,
113
+ "WIRE0_SDA_1": 19,
114
+ "WIRE0_SDA_2": 3,
115
+ "WIRE0_SDA_3": 24,
116
+ "WIRE0_SDA_4": 2,
117
+ "WIRE0_SDA_5": 25,
118
+ "WIRE0_SDA_6": 1,
119
+ "WIRE0_SDA_7": 0,
120
+ "WIRE0_SDA_8": 9,
121
+ "SERIAL0_RX": 3,
122
+ "SERIAL0_TX": 2,
123
+ "SERIAL1_RX": 24,
124
+ "SERIAL1_TX": 25,
125
+ "ADC2": 0,
126
+ "ADC3": 1,
127
+ "ADC5": 19,
128
+ "PA00": 0,
129
+ "PA0": 0,
130
+ "PA01": 1,
131
+ "PA1": 1,
132
+ "PA02": 2,
133
+ "PA2": 2,
134
+ "PA03": 3,
135
+ "PA3": 3,
136
+ "PA09": 9,
137
+ "PA9": 9,
138
+ "PA11": 11,
139
+ "PB03": 19,
140
+ "PB3": 19,
141
+ "PB08": 24,
142
+ "PB8": 24,
143
+ "PB09": 25,
144
+ "PB9": 25,
145
+ "RX0": 3,
146
+ "RX1": 24,
147
+ "SCL0": 9,
148
+ "SDA0": 9,
149
+ "TX0": 2,
150
+ "TX1": 25,
151
+ "D0": 11,
152
+ "D1": 19,
153
+ "D2": 3,
154
+ "D3": 24,
155
+ "D4": 2,
156
+ "D5": 25,
157
+ "D6": 1,
158
+ "D7": 0,
159
+ "D8": 9,
160
+ "A0": 19,
161
+ "A1": 1,
162
+ "A2": 0,
163
+ },
164
+ "generic-ln882hki": {
165
+ "WIRE0_SCL_0": 0,
166
+ "WIRE0_SCL_1": 1,
167
+ "WIRE0_SCL_2": 2,
168
+ "WIRE0_SCL_3": 3,
169
+ "WIRE0_SCL_4": 4,
170
+ "WIRE0_SCL_5": 5,
171
+ "WIRE0_SCL_6": 6,
172
+ "WIRE0_SCL_7": 7,
173
+ "WIRE0_SCL_8": 8,
174
+ "WIRE0_SCL_9": 9,
175
+ "WIRE0_SCL_10": 10,
176
+ "WIRE0_SCL_11": 11,
177
+ "WIRE0_SCL_12": 12,
178
+ "WIRE0_SCL_13": 19,
179
+ "WIRE0_SCL_14": 20,
180
+ "WIRE0_SCL_15": 21,
181
+ "WIRE0_SCL_16": 22,
182
+ "WIRE0_SCL_17": 23,
183
+ "WIRE0_SCL_18": 24,
184
+ "WIRE0_SCL_19": 25,
185
+ "WIRE0_SDA_0": 0,
186
+ "WIRE0_SDA_1": 1,
187
+ "WIRE0_SDA_2": 2,
188
+ "WIRE0_SDA_3": 3,
189
+ "WIRE0_SDA_4": 4,
190
+ "WIRE0_SDA_5": 5,
191
+ "WIRE0_SDA_6": 6,
192
+ "WIRE0_SDA_7": 7,
193
+ "WIRE0_SDA_8": 8,
194
+ "WIRE0_SDA_9": 9,
195
+ "WIRE0_SDA_10": 10,
196
+ "WIRE0_SDA_11": 11,
197
+ "WIRE0_SDA_12": 12,
198
+ "WIRE0_SDA_13": 19,
199
+ "WIRE0_SDA_14": 20,
200
+ "WIRE0_SDA_15": 21,
201
+ "WIRE0_SDA_16": 22,
202
+ "WIRE0_SDA_17": 23,
203
+ "WIRE0_SDA_18": 24,
204
+ "WIRE0_SDA_19": 25,
205
+ "SERIAL0_RX": 3,
206
+ "SERIAL0_TX": 2,
207
+ "SERIAL1_RX": 24,
208
+ "SERIAL1_TX": 25,
209
+ "ADC2": 0,
210
+ "ADC3": 1,
211
+ "ADC4": 4,
212
+ "ADC5": 19,
213
+ "ADC6": 20,
214
+ "ADC7": 21,
215
+ "PA00": 0,
216
+ "PA0": 0,
217
+ "PA01": 1,
218
+ "PA1": 1,
219
+ "PA02": 2,
220
+ "PA2": 2,
221
+ "PA03": 3,
222
+ "PA3": 3,
223
+ "PA04": 4,
224
+ "PA4": 4,
225
+ "PA05": 5,
226
+ "PA5": 5,
227
+ "PA06": 6,
228
+ "PA6": 6,
229
+ "PA07": 7,
230
+ "PA7": 7,
231
+ "PA08": 8,
232
+ "PA8": 8,
233
+ "PA09": 9,
234
+ "PA9": 9,
235
+ "PA10": 10,
236
+ "PA11": 11,
237
+ "PA12": 12,
238
+ "PB03": 19,
239
+ "PB3": 19,
240
+ "PB04": 20,
241
+ "PB4": 20,
242
+ "PB05": 21,
243
+ "PB5": 21,
244
+ "PB06": 22,
245
+ "PB6": 22,
246
+ "PB07": 23,
247
+ "PB7": 23,
248
+ "PB08": 24,
249
+ "PB8": 24,
250
+ "PB09": 25,
251
+ "PB9": 25,
252
+ "RX0": 3,
253
+ "RX1": 24,
254
+ "TX0": 2,
255
+ "TX1": 25,
256
+ "D0": 0,
257
+ "D1": 1,
258
+ "D2": 2,
259
+ "D3": 3,
260
+ "D4": 4,
261
+ "D5": 5,
262
+ "D6": 6,
263
+ "D7": 7,
264
+ "D8": 8,
265
+ "D9": 9,
266
+ "D10": 10,
267
+ "D11": 11,
268
+ "D12": 12,
269
+ "D13": 19,
270
+ "D14": 20,
271
+ "D15": 21,
272
+ "D16": 22,
273
+ "D17": 23,
274
+ "D18": 24,
275
+ "D19": 25,
276
+ "A2": 0,
277
+ "A3": 1,
278
+ "A4": 4,
279
+ "A5": 19,
280
+ "A6": 20,
281
+ "A7": 21,
282
+ },
283
+ }
284
+
285
+ BOARDS = LN882X_BOARDS
@@ -14,8 +14,8 @@ from esphome.const import (
14
14
  CONF_WEB_SERVER,
15
15
  )
16
16
  from esphome.core import CORE, coroutine_with_priority
17
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
17
18
  from esphome.cpp_generator import MockObjClass
18
- from esphome.cpp_helpers import setup_entity
19
19
 
20
20
  CODEOWNERS = ["@esphome/core"]
21
21
  IS_PLATFORM_COMPONENT = True
@@ -67,6 +67,9 @@ _LOCK_SCHEMA = (
67
67
  )
68
68
 
69
69
 
70
+ _LOCK_SCHEMA.add_extra(entity_duplicate_validator("lock"))
71
+
72
+
70
73
  def lock_schema(
71
74
  class_: MockObjClass = cv.UNDEFINED,
72
75
  *,
@@ -94,7 +97,7 @@ LOCK_SCHEMA.add_extra(cv.deprecated_schema_constant("lock"))
94
97
 
95
98
 
96
99
  async def _setup_lock_core(var, config):
97
- await setup_entity(var, config)
100
+ await setup_entity(var, config, "lock")
98
101
 
99
102
  for conf in config.get(CONF_ON_LOCK, []):
100
103
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
@@ -16,7 +16,12 @@ from esphome.components.esp32.const import (
16
16
  VARIANT_ESP32S3,
17
17
  )
18
18
  from esphome.components.libretiny import get_libretiny_component, get_libretiny_family
19
- from esphome.components.libretiny.const import COMPONENT_BK72XX, COMPONENT_RTL87XX
19
+ from esphome.components.libretiny.const import (
20
+ COMPONENT_BK72XX,
21
+ COMPONENT_LN882X,
22
+ COMPONENT_RTL87XX,
23
+ )
24
+ from esphome.config_helpers import filter_source_files_from_platform
20
25
  import esphome.config_validation as cv
21
26
  from esphome.const import (
22
27
  CONF_ARGS,
@@ -35,8 +40,10 @@ from esphome.const import (
35
40
  PLATFORM_BK72XX,
36
41
  PLATFORM_ESP32,
37
42
  PLATFORM_ESP8266,
43
+ PLATFORM_LN882X,
38
44
  PLATFORM_RP2040,
39
45
  PLATFORM_RTL87XX,
46
+ PlatformFramework,
40
47
  )
41
48
  from esphome.core import CORE, Lambda, coroutine_with_priority
42
49
 
@@ -100,6 +107,7 @@ UART_SELECTION_ESP8266 = [UART0, UART0_SWAP, UART1]
100
107
 
101
108
  UART_SELECTION_LIBRETINY = {
102
109
  COMPONENT_BK72XX: [DEFAULT, UART1, UART2],
110
+ COMPONENT_LN882X: [DEFAULT, UART0, UART1, UART2],
103
111
  COMPONENT_RTL87XX: [DEFAULT, UART0, UART1, UART2],
104
112
  }
105
113
 
@@ -184,7 +192,9 @@ CONFIG_SCHEMA = cv.All(
184
192
  {
185
193
  cv.GenerateID(): cv.declare_id(Logger),
186
194
  cv.Optional(CONF_BAUD_RATE, default=115200): cv.positive_int,
187
- cv.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.validate_bytes,
195
+ cv.Optional(CONF_TX_BUFFER_SIZE, default=512): cv.All(
196
+ cv.validate_bytes, cv.int_range(min=160, max=65535)
197
+ ),
188
198
  cv.Optional(CONF_DEASSERT_RTS_DTR, default=False): cv.boolean,
189
199
  cv.SplitDefault(
190
200
  CONF_TASK_LOG_BUFFER_SIZE,
@@ -215,6 +225,7 @@ CONFIG_SCHEMA = cv.All(
215
225
  esp32_p4_idf=USB_SERIAL_JTAG,
216
226
  rp2040=USB_CDC,
217
227
  bk72xx=DEFAULT,
228
+ ln882x=DEFAULT,
218
229
  rtl87xx=DEFAULT,
219
230
  ): cv.All(
220
231
  cv.only_on(
@@ -223,6 +234,7 @@ CONFIG_SCHEMA = cv.All(
223
234
  PLATFORM_ESP32,
224
235
  PLATFORM_RP2040,
225
236
  PLATFORM_BK72XX,
237
+ PLATFORM_LN882X,
226
238
  PLATFORM_RTL87XX,
227
239
  ]
228
240
  ),
@@ -324,7 +336,10 @@ async def to_code(config):
324
336
  if CORE.using_arduino:
325
337
  if config[CONF_HARDWARE_UART] == USB_CDC:
326
338
  cg.add_build_flag("-DARDUINO_USB_CDC_ON_BOOT=1")
327
- if CORE.is_esp32 and get_esp32_variant() == VARIANT_ESP32C3:
339
+ if CORE.is_esp32 and get_esp32_variant() in (
340
+ VARIANT_ESP32C3,
341
+ VARIANT_ESP32C6,
342
+ ):
328
343
  cg.add_build_flag("-DARDUINO_USB_MODE=1")
329
344
 
330
345
  if CORE.using_esp_idf:
@@ -431,3 +446,25 @@ async def logger_set_level_to_code(config, action_id, template_arg, args):
431
446
 
432
447
  lambda_ = await cg.process_lambda(Lambda(text), args, return_type=cg.void)
433
448
  return cg.new_Pvariable(action_id, template_arg, lambda_)
449
+
450
+
451
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
452
+ {
453
+ "logger_esp32.cpp": {
454
+ PlatformFramework.ESP32_ARDUINO,
455
+ PlatformFramework.ESP32_IDF,
456
+ },
457
+ "logger_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
458
+ "logger_host.cpp": {PlatformFramework.HOST_NATIVE},
459
+ "logger_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
460
+ "logger_libretiny.cpp": {
461
+ PlatformFramework.BK72XX_ARDUINO,
462
+ PlatformFramework.RTL87XX_ARDUINO,
463
+ PlatformFramework.LN882X_ARDUINO,
464
+ },
465
+ "task_log_buffer.cpp": {
466
+ PlatformFramework.ESP32_ARDUINO,
467
+ PlatformFramework.ESP32_IDF,
468
+ },
469
+ }
470
+ )
@@ -24,7 +24,7 @@ static const char *const TAG = "logger";
24
24
  // - Messages are serialized through main loop for proper console output
25
25
  // - Fallback to emergency console logging only if ring buffer is full
26
26
  // - WITHOUT task log buffer: Only emergency console output, no callbacks
27
- void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *format, va_list args) { // NOLINT
27
+ void HOT Logger::log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args) { // NOLINT
28
28
  if (level > this->level_for(tag))
29
29
  return;
30
30
 
@@ -46,8 +46,13 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
46
46
  bool message_sent = false;
47
47
  #ifdef USE_ESPHOME_TASK_LOG_BUFFER
48
48
  // For non-main tasks, queue the message for callbacks - but only if we have any callbacks registered
49
- message_sent = this->log_buffer_->send_message_thread_safe(static_cast<uint8_t>(level), tag,
50
- static_cast<uint16_t>(line), current_task, format, args);
49
+ message_sent =
50
+ this->log_buffer_->send_message_thread_safe(level, tag, static_cast<uint16_t>(line), current_task, format, args);
51
+ if (message_sent) {
52
+ // Enable logger loop to process the buffered message
53
+ // This is safe to call from any context including ISRs
54
+ this->enable_loop_soon_any_context();
55
+ }
51
56
  #endif // USE_ESPHOME_TASK_LOG_BUFFER
52
57
 
53
58
  // Emergency console logging for non-main tasks when ring buffer is full or disabled
@@ -58,7 +63,7 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
58
63
  // Maximum size for console log messages (includes null terminator)
59
64
  static const size_t MAX_CONSOLE_LOG_MSG_SIZE = 144;
60
65
  char console_buffer[MAX_CONSOLE_LOG_MSG_SIZE]; // MUST be stack allocated for thread safety
61
- int buffer_at = 0; // Initialize buffer position
66
+ uint16_t buffer_at = 0; // Initialize buffer position
62
67
  this->format_log_to_buffer_with_terminator_(level, tag, line, format, args, console_buffer, &buffer_at,
63
68
  MAX_CONSOLE_LOG_MSG_SIZE);
64
69
  this->write_msg_(console_buffer);
@@ -69,7 +74,7 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
69
74
  }
70
75
  #else
71
76
  // Implementation for all other platforms
72
- void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *format, va_list args) { // NOLINT
77
+ void HOT Logger::log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args) { // NOLINT
73
78
  if (level > this->level_for(tag) || global_recursion_guard_)
74
79
  return;
75
80
 
@@ -85,7 +90,26 @@ void HOT Logger::log_vprintf_(int level, const char *tag, int line, const char *
85
90
  #ifdef USE_STORE_LOG_STR_IN_FLASH
86
91
  // Implementation for ESP8266 with flash string support.
87
92
  // Note: USE_STORE_LOG_STR_IN_FLASH is only defined for ESP8266.
88
- void Logger::log_vprintf_(int level, const char *tag, int line, const __FlashStringHelper *format,
93
+ //
94
+ // This function handles format strings stored in flash memory (PROGMEM) to save RAM.
95
+ // The buffer is used in a special way to avoid allocating extra memory:
96
+ //
97
+ // Memory layout during execution:
98
+ // Step 1: Copy format string from flash to buffer
99
+ // tx_buffer_: [format_string][null][.....................]
100
+ // tx_buffer_at_: ------------------^
101
+ // msg_start: saved here -----------^
102
+ //
103
+ // Step 2: format_log_to_buffer_with_terminator_ reads format string from beginning
104
+ // and writes formatted output starting at msg_start position
105
+ // tx_buffer_: [format_string][null][formatted_message][null]
106
+ // tx_buffer_at_: -------------------------------------^
107
+ //
108
+ // Step 3: Output the formatted message (starting at msg_start)
109
+ // write_msg_ and callbacks receive: this->tx_buffer_ + msg_start
110
+ // which points to: [formatted_message][null]
111
+ //
112
+ void Logger::log_vprintf_(uint8_t level, const char *tag, int line, const __FlashStringHelper *format,
89
113
  va_list args) { // NOLINT
90
114
  if (level > this->level_for(tag) || global_recursion_guard_)
91
115
  return;
@@ -116,13 +140,15 @@ void Logger::log_vprintf_(int level, const char *tag, int line, const __FlashStr
116
140
  if (this->baud_rate_ > 0) {
117
141
  this->write_msg_(this->tx_buffer_ + msg_start);
118
142
  }
119
- this->log_callback_.call(level, tag, this->tx_buffer_ + msg_start);
143
+ size_t msg_length =
144
+ this->tx_buffer_at_ - msg_start; // Don't subtract 1 - tx_buffer_at_ is already at the null terminator position
145
+ this->log_callback_.call(level, tag, this->tx_buffer_ + msg_start, msg_length);
120
146
 
121
147
  global_recursion_guard_ = false;
122
148
  }
123
149
  #endif // USE_STORE_LOG_STR_IN_FLASH
124
150
 
125
- inline int Logger::level_for(const char *tag) {
151
+ inline uint8_t Logger::level_for(const char *tag) {
126
152
  auto it = this->log_levels_.find(tag);
127
153
  if (it != this->log_levels_.end())
128
154
  return it->second;
@@ -139,6 +165,10 @@ Logger::Logger(uint32_t baud_rate, size_t tx_buffer_size) : baud_rate_(baud_rate
139
165
  #ifdef USE_ESPHOME_TASK_LOG_BUFFER
140
166
  void Logger::init_log_buffer(size_t total_buffer_size) {
141
167
  this->log_buffer_ = esphome::make_unique<logger::TaskLogBuffer>(total_buffer_size);
168
+
169
+ // Start with loop disabled when using task buffer (unless using USB CDC)
170
+ // The loop will be enabled automatically when messages arrive
171
+ this->disable_loop_when_buffer_empty_();
142
172
  }
143
173
  #endif
144
174
 
@@ -176,7 +206,8 @@ void Logger::loop() {
176
206
  this->tx_buffer_size_);
177
207
  this->write_footer_to_buffer_(this->tx_buffer_, &this->tx_buffer_at_, this->tx_buffer_size_);
178
208
  this->tx_buffer_[this->tx_buffer_at_] = '\0';
179
- this->log_callback_.call(message->level, message->tag, this->tx_buffer_);
209
+ size_t msg_len = this->tx_buffer_at_; // We already know the length from tx_buffer_at_
210
+ this->log_callback_.call(message->level, message->tag, this->tx_buffer_, msg_len);
180
211
  // At this point all the data we need from message has been transferred to the tx_buffer
181
212
  // so we can release the message to allow other tasks to use it as soon as possible.
182
213
  this->log_buffer_->release_message_main_loop(received_token);
@@ -189,19 +220,23 @@ void Logger::loop() {
189
220
  this->write_msg_(this->tx_buffer_);
190
221
  }
191
222
  }
223
+ } else {
224
+ // No messages to process, disable loop if appropriate
225
+ // This reduces overhead when there's no async logging activity
226
+ this->disable_loop_when_buffer_empty_();
192
227
  }
193
228
  #endif
194
229
  }
195
230
  #endif
196
231
 
197
232
  void Logger::set_baud_rate(uint32_t baud_rate) { this->baud_rate_ = baud_rate; }
198
- void Logger::set_log_level(const std::string &tag, int log_level) { this->log_levels_[tag] = log_level; }
233
+ void Logger::set_log_level(const std::string &tag, uint8_t log_level) { this->log_levels_[tag] = log_level; }
199
234
 
200
235
  #if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) || defined(USE_LIBRETINY)
201
236
  UARTSelection Logger::get_uart() const { return this->uart_; }
202
237
  #endif
203
238
 
204
- void Logger::add_on_log_callback(std::function<void(int, const char *, const char *)> &&callback) {
239
+ void Logger::add_on_log_callback(std::function<void(uint8_t, const char *, const char *, size_t)> &&callback) {
205
240
  this->log_callback_.add(std::move(callback));
206
241
  }
207
242
  float Logger::get_setup_priority() const { return setup_priority::BUS + 500.0f; }
@@ -230,7 +265,7 @@ void Logger::dump_config() {
230
265
  }
231
266
  }
232
267
 
233
- void Logger::set_log_level(int level) {
268
+ void Logger::set_log_level(uint8_t level) {
234
269
  if (level > ESPHOME_LOG_LEVEL) {
235
270
  level = ESPHOME_LOG_LEVEL;
236
271
  ESP_LOGW(TAG, "Cannot set log level higher than pre-compiled %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);