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
@@ -6,7 +6,7 @@ from esphome.config_validation import Invalid
6
6
  from esphome.const import CONF_DEFAULT, CONF_GROUP, CONF_ID, CONF_STATE, CONF_TYPE
7
7
  from esphome.core import ID, TimePeriod
8
8
  from esphome.coroutine import FakeAwaitable
9
- from esphome.cpp_generator import CallExpression, MockObj
9
+ from esphome.cpp_generator import MockObj
10
10
 
11
11
  from ..defines import (
12
12
  CONF_FLEX_ALIGN_CROSS,
@@ -453,7 +453,17 @@ async def widget_to_code(w_cnfig, w_type: WidgetType, parent):
453
453
 
454
454
  w = Widget.create(wid, var, spec, w_cnfig)
455
455
  if theme := theme_widget_map.get(w_type):
456
- lv_add(CallExpression(theme, w.obj))
456
+ for part, states in theme.items():
457
+ part = "LV_PART_" + part.upper()
458
+ for state, style in states.items():
459
+ state = "LV_STATE_" + state.upper()
460
+ if state == "LV_STATE_DEFAULT":
461
+ lv_state = literal(part)
462
+ elif part == "LV_PART_MAIN":
463
+ lv_state = literal(state)
464
+ else:
465
+ lv_state = join_enums((state, part))
466
+ lv.obj_add_style(w.obj, style, lv_state)
457
467
  await set_obj_properties(w, w_cnfig)
458
468
  await add_widgets(w, w_cnfig)
459
469
  await spec.to_code(w, w_cnfig)
@@ -1,8 +1,15 @@
1
1
  import esphome.config_validation as cv
2
2
  from esphome.const import CONF_MAX_VALUE, CONF_MIN_VALUE, CONF_MODE, CONF_VALUE
3
3
 
4
- from ..defines import BAR_MODES, CONF_ANIMATED, CONF_INDICATOR, CONF_MAIN, literal
5
- from ..lv_validation import animated, get_start_value, lv_float
4
+ from ..defines import (
5
+ BAR_MODES,
6
+ CONF_ANIMATED,
7
+ CONF_INDICATOR,
8
+ CONF_MAIN,
9
+ CONF_START_VALUE,
10
+ literal,
11
+ )
12
+ from ..lv_validation import animated, lv_int
6
13
  from ..lvcode import lv
7
14
  from ..types import LvNumber, NumberType
8
15
  from . import Widget
@@ -10,22 +17,30 @@ from . import Widget
10
17
  # Note this file cannot be called "bar.py" because that name is disallowed.
11
18
 
12
19
  CONF_BAR = "bar"
13
- BAR_MODIFY_SCHEMA = cv.Schema(
14
- {
15
- cv.Optional(CONF_VALUE): lv_float,
16
- cv.Optional(CONF_ANIMATED, default=True): animated,
17
- }
18
- )
20
+
21
+
22
+ def validate_bar(config):
23
+ if config.get(CONF_MODE) != "LV_BAR_MODE_RANGE" and CONF_START_VALUE in config:
24
+ raise cv.Invalid(
25
+ f"{CONF_START_VALUE} is only allowed when {CONF_MODE} is set to 'RANGE'"
26
+ )
27
+ if (CONF_MIN_VALUE in config) != (CONF_MAX_VALUE in config):
28
+ raise cv.Invalid(
29
+ f"If either {CONF_MIN_VALUE} or {CONF_MAX_VALUE} is set, both must be set"
30
+ )
31
+ return config
32
+
19
33
 
20
34
  BAR_SCHEMA = cv.Schema(
21
35
  {
22
- cv.Optional(CONF_VALUE): lv_float,
23
- cv.Optional(CONF_MIN_VALUE, default=0): cv.int_,
24
- cv.Optional(CONF_MAX_VALUE, default=100): cv.int_,
25
- cv.Optional(CONF_MODE, default="NORMAL"): BAR_MODES.one_of,
36
+ cv.Optional(CONF_VALUE): lv_int,
37
+ cv.Optional(CONF_START_VALUE): lv_int,
38
+ cv.Optional(CONF_MIN_VALUE): lv_int,
39
+ cv.Optional(CONF_MAX_VALUE): lv_int,
40
+ cv.Optional(CONF_MODE): BAR_MODES.one_of,
26
41
  cv.Optional(CONF_ANIMATED, default=True): animated,
27
42
  }
28
- )
43
+ ).add_extra(validate_bar)
29
44
 
30
45
 
31
46
  class BarType(NumberType):
@@ -35,17 +50,23 @@ class BarType(NumberType):
35
50
  LvNumber("lv_bar_t"),
36
51
  parts=(CONF_MAIN, CONF_INDICATOR),
37
52
  schema=BAR_SCHEMA,
38
- modify_schema=BAR_MODIFY_SCHEMA,
39
53
  )
40
54
 
41
55
  async def to_code(self, w: Widget, config):
42
56
  var = w.obj
57
+ if mode := config.get(CONF_MODE):
58
+ lv.bar_set_mode(var, literal(mode))
59
+ is_animated = literal(config[CONF_ANIMATED])
43
60
  if CONF_MIN_VALUE in config:
44
- lv.bar_set_range(var, config[CONF_MIN_VALUE], config[CONF_MAX_VALUE])
45
- lv.bar_set_mode(var, literal(config[CONF_MODE]))
46
- value = await get_start_value(config)
47
- if value is not None:
48
- lv.bar_set_value(var, value, literal(config[CONF_ANIMATED]))
61
+ lv.bar_set_range(
62
+ var,
63
+ await lv_int.process(config[CONF_MIN_VALUE]),
64
+ await lv_int.process(config[CONF_MAX_VALUE]),
65
+ )
66
+ if value := await lv_int.process(config.get(CONF_VALUE)):
67
+ lv.bar_set_value(var, value, is_animated)
68
+ if start_value := await lv_int.process(config.get(CONF_START_VALUE)):
69
+ lv.bar_set_start_value(var, start_value, is_animated)
49
70
 
50
71
  @property
51
72
  def animated(self):
@@ -29,9 +29,9 @@ from ..defines import (
29
29
  )
30
30
  from ..helpers import add_lv_use, lvgl_components_required
31
31
  from ..lv_validation import (
32
- angle,
33
32
  get_end_value,
34
33
  get_start_value,
34
+ lv_angle,
35
35
  lv_bool,
36
36
  lv_color,
37
37
  lv_float,
@@ -162,7 +162,7 @@ SCALE_SCHEMA = cv.Schema(
162
162
  cv.Optional(CONF_RANGE_FROM, default=0.0): cv.float_,
163
163
  cv.Optional(CONF_RANGE_TO, default=100.0): cv.float_,
164
164
  cv.Optional(CONF_ANGLE_RANGE, default=270): cv.int_range(0, 360),
165
- cv.Optional(CONF_ROTATION): angle,
165
+ cv.Optional(CONF_ROTATION): lv_angle,
166
166
  cv.Optional(CONF_INDICATORS): cv.ensure_list(INDICATOR_SCHEMA),
167
167
  }
168
168
  )
@@ -187,7 +187,7 @@ class MeterType(WidgetType):
187
187
  for scale_conf in config.get(CONF_SCALES, ()):
188
188
  rotation = 90 + (360 - scale_conf[CONF_ANGLE_RANGE]) / 2
189
189
  if CONF_ROTATION in scale_conf:
190
- rotation = scale_conf[CONF_ROTATION] // 10
190
+ rotation = await lv_angle.process(scale_conf[CONF_ROTATION])
191
191
  with LocalVariable(
192
192
  "meter_var", "lv_meter_scale_t", lv_expr.meter_add_scale(var)
193
193
  ) as meter_var:
@@ -205,21 +205,20 @@ class MeterType(WidgetType):
205
205
  var,
206
206
  meter_var,
207
207
  ticks[CONF_COUNT],
208
- ticks[CONF_WIDTH],
209
- ticks[CONF_LENGTH],
208
+ await size.process(ticks[CONF_WIDTH]),
209
+ await size.process(ticks[CONF_LENGTH]),
210
210
  color,
211
211
  )
212
212
  if CONF_MAJOR in ticks:
213
213
  major = ticks[CONF_MAJOR]
214
- color = await lv_color.process(major[CONF_COLOR])
215
214
  lv.meter_set_scale_major_ticks(
216
215
  var,
217
216
  meter_var,
218
217
  major[CONF_STRIDE],
219
- major[CONF_WIDTH],
220
- major[CONF_LENGTH],
221
- color,
222
- major[CONF_LABEL_GAP],
218
+ await size.process(major[CONF_WIDTH]),
219
+ await size.process(major[CONF_LENGTH]),
220
+ await lv_color.process(major[CONF_COLOR]),
221
+ await size.process(major[CONF_LABEL_GAP]),
223
222
  )
224
223
  for indicator in scale_conf.get(CONF_INDICATORS, ()):
225
224
  (t, v) = next(iter(indicator.items()))
@@ -233,7 +232,11 @@ class MeterType(WidgetType):
233
232
  lv_assign(
234
233
  ivar,
235
234
  lv_expr.meter_add_needle_line(
236
- var, meter_var, v[CONF_WIDTH], color, v[CONF_R_MOD]
235
+ var,
236
+ meter_var,
237
+ await size.process(v[CONF_WIDTH]),
238
+ color,
239
+ await size.process(v[CONF_R_MOD]),
237
240
  ),
238
241
  )
239
242
  if t == CONF_ARC:
@@ -241,7 +244,11 @@ class MeterType(WidgetType):
241
244
  lv_assign(
242
245
  ivar,
243
246
  lv_expr.meter_add_arc(
244
- var, meter_var, v[CONF_WIDTH], color, v[CONF_R_MOD]
247
+ var,
248
+ meter_var,
249
+ await size.process(v[CONF_WIDTH]),
250
+ color,
251
+ await size.process(v[CONF_R_MOD]),
245
252
  ),
246
253
  )
247
254
  if t == CONF_TICK_STYLE:
@@ -257,7 +264,7 @@ class MeterType(WidgetType):
257
264
  color_start,
258
265
  color_end,
259
266
  v[CONF_LOCAL],
260
- v[CONF_WIDTH],
267
+ size.process(v[CONF_WIDTH]),
261
268
  ),
262
269
  )
263
270
  if t == CONF_IMAGE:
@@ -8,7 +8,7 @@ namespace m5stack_8angle {
8
8
  static const char *const TAG = "m5stack_8angle.light";
9
9
 
10
10
  void M5Stack8AngleLightOutput::setup() {
11
- ExternalRAMAllocator<uint8_t> allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
11
+ RAMAllocator<uint8_t> allocator;
12
12
  this->buf_ = allocator.allocate(M5STACK_8ANGLE_NUM_LEDS * M5STACK_8ANGLE_BYTES_PER_LED);
13
13
  if (this->buf_ == nullptr) {
14
14
  ESP_LOGE(TAG, "Failed to allocate buffer of size %u", M5STACK_8ANGLE_NUM_LEDS * M5STACK_8ANGLE_BYTES_PER_LED);
@@ -38,7 +38,6 @@ class MAX9611Component : public PollingComponent, public i2c::I2CDevice {
38
38
  public:
39
39
  void setup() override;
40
40
  void dump_config() override;
41
- float get_setup_priority() const override { return setup_priority::DATA; }
42
41
  void update() override;
43
42
  void set_voltage_sensor(sensor::Sensor *vs) { voltage_sensor_ = vs; }
44
43
  void set_current_sensor(sensor::Sensor *cs) { current_sensor_ = cs; }
@@ -50,7 +50,7 @@ MCP23016_PIN_SCHEMA = pins.gpio_base_schema(
50
50
  cv.int_range(min=0, max=15),
51
51
  modes=[CONF_INPUT, CONF_OUTPUT],
52
52
  mode_validator=validate_mode,
53
- invertable=True,
53
+ invertible=True,
54
54
  ).extend(
55
55
  {
56
56
  cv.Required(CONF_MCP23016): cv.use_id(MCP23016),
@@ -60,7 +60,7 @@ MCP23XXX_PIN_SCHEMA = pins.gpio_base_schema(
60
60
  cv.int_range(min=0, max=15),
61
61
  modes=[CONF_INPUT, CONF_OUTPUT, CONF_PULLUP],
62
62
  mode_validator=validate_mode,
63
- invertable=True,
63
+ invertible=True,
64
64
  ).extend(
65
65
  {
66
66
  cv.Required(CONF_MCP23XXX): cv.use_id(MCP23XXXBase),
@@ -1,6 +1,6 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import i2c
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID
5
5
 
6
6
  CODEOWNERS = ["@p1ngb4ck"]
@@ -1,8 +1,9 @@
1
1
  import esphome.codegen as cg
2
- import esphome.config_validation as cv
3
2
  from esphome.components import output
3
+ import esphome.config_validation as cv
4
4
  from esphome.const import CONF_CHANNEL, CONF_ID, CONF_INITIAL_VALUE
5
- from .. import Mcp4461Component, CONF_MCP4461_ID, mcp4461_ns
5
+
6
+ from .. import CONF_MCP4461_ID, Mcp4461Component, mcp4461_ns
6
7
 
7
8
  DEPENDENCIES = ["mcp4461"]
8
9
 
@@ -24,8 +24,6 @@ class MCP9600Component : public PollingComponent, public i2c::I2CDevice {
24
24
  void dump_config() override;
25
25
  void update() override;
26
26
 
27
- float get_setup_priority() const override { return setup_priority::DATA; }
28
-
29
27
  void set_hot_junction(sensor::Sensor *hot_junction) { this->hot_junction_sensor_ = hot_junction; }
30
28
  void set_cold_junction(sensor::Sensor *cold_junction) { this->cold_junction_sensor_ = cold_junction; }
31
29
  void set_thermocouple_type(MCP9600ThermocoupleType thermocouple_type) {
@@ -7,7 +7,7 @@
7
7
  namespace esphome {
8
8
  namespace md5 {
9
9
 
10
- #if defined(USE_ARDUINO) && !defined(USE_RP2040)
10
+ #if defined(USE_ARDUINO) && !defined(USE_RP2040) && !defined(USE_ESP32)
11
11
  void MD5Digest::init() {
12
12
  memset(this->digest_, 0, 16);
13
13
  MD5Init(&this->ctx_);
@@ -18,7 +18,7 @@ void MD5Digest::add(const uint8_t *data, size_t len) { MD5Update(&this->ctx_, da
18
18
  void MD5Digest::calculate() { MD5Final(this->digest_, &this->ctx_); }
19
19
  #endif // USE_ARDUINO && !USE_RP2040
20
20
 
21
- #ifdef USE_ESP_IDF
21
+ #ifdef USE_ESP32
22
22
  void MD5Digest::init() {
23
23
  memset(this->digest_, 0, 16);
24
24
  esp_rom_md5_init(&this->ctx_);
@@ -27,7 +27,7 @@ void MD5Digest::init() {
27
27
  void MD5Digest::add(const uint8_t *data, size_t len) { esp_rom_md5_update(&this->ctx_, data, len); }
28
28
 
29
29
  void MD5Digest::calculate() { esp_rom_md5_final(this->digest_, &this->ctx_); }
30
- #endif // USE_ESP_IDF
30
+ #endif // USE_ESP32
31
31
 
32
32
  #ifdef USE_RP2040
33
33
  void MD5Digest::init() {
@@ -3,16 +3,11 @@
3
3
  #include "esphome/core/defines.h"
4
4
  #ifdef USE_MD5
5
5
 
6
- #ifdef USE_ESP_IDF
6
+ #ifdef USE_ESP32
7
7
  #include "esp_rom_md5.h"
8
8
  #define MD5_CTX_TYPE md5_context_t
9
9
  #endif
10
10
 
11
- #if defined(USE_ARDUINO) && defined(USE_ESP32)
12
- #include "rom/md5_hash.h"
13
- #define MD5_CTX_TYPE MD5Context
14
- #endif
15
-
16
11
  #if defined(USE_ARDUINO) && defined(USE_ESP8266)
17
12
  #include <md5.h>
18
13
  #define MD5_CTX_TYPE md5_context_t
@@ -1,5 +1,6 @@
1
1
  import esphome.codegen as cg
2
2
  from esphome.components.esp32 import add_idf_component
3
+ from esphome.config_helpers import filter_source_files_from_platform
3
4
  import esphome.config_validation as cv
4
5
  from esphome.const import (
5
6
  CONF_DISABLED,
@@ -8,8 +9,7 @@ from esphome.const import (
8
9
  CONF_PROTOCOL,
9
10
  CONF_SERVICE,
10
11
  CONF_SERVICES,
11
- KEY_CORE,
12
- KEY_FRAMEWORK_VERSION,
12
+ PlatformFramework,
13
13
  )
14
14
  from esphome.core import CORE, coroutine_with_priority
15
15
 
@@ -85,15 +85,8 @@ async def to_code(config):
85
85
  elif CORE.is_rp2040:
86
86
  cg.add_library("LEAmDNS", None)
87
87
 
88
- if CORE.using_esp_idf and CORE.data[KEY_CORE][KEY_FRAMEWORK_VERSION] >= cv.Version(
89
- 5, 0, 0
90
- ):
91
- add_idf_component(
92
- name="mdns",
93
- repo="https://github.com/espressif/esp-protocols.git",
94
- ref="mdns-v1.8.2",
95
- path="components/mdns",
96
- )
88
+ if CORE.using_esp_idf:
89
+ add_idf_component(name="espressif/mdns", ref="1.8.2")
97
90
 
98
91
  cg.add_define("USE_MDNS")
99
92
 
@@ -117,3 +110,21 @@ async def to_code(config):
117
110
  )
118
111
 
119
112
  cg.add(var.add_extra_service(exp))
113
+
114
+
115
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
116
+ {
117
+ "mdns_esp32.cpp": {
118
+ PlatformFramework.ESP32_ARDUINO,
119
+ PlatformFramework.ESP32_IDF,
120
+ },
121
+ "mdns_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
122
+ "mdns_host.cpp": {PlatformFramework.HOST_NATIVE},
123
+ "mdns_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
124
+ "mdns_libretiny.cpp": {
125
+ PlatformFramework.BK72XX_ARDUINO,
126
+ PlatformFramework.RTL87XX_ARDUINO,
127
+ PlatformFramework.LN882X_ARDUINO,
128
+ },
129
+ }
130
+ )
@@ -11,9 +11,9 @@ from esphome.const import (
11
11
  CONF_VOLUME,
12
12
  )
13
13
  from esphome.core import CORE
14
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
14
15
  from esphome.coroutine import coroutine_with_priority
15
16
  from esphome.cpp_generator import MockObjClass
16
- from esphome.cpp_helpers import setup_entity
17
17
 
18
18
  CODEOWNERS = ["@jesserockz"]
19
19
 
@@ -81,7 +81,7 @@ IsAnnouncingCondition = media_player_ns.class_(
81
81
 
82
82
 
83
83
  async def setup_media_player_core_(var, config):
84
- await setup_entity(var, config)
84
+ await setup_entity(var, config, "media_player")
85
85
  for conf in config.get(CONF_ON_STATE, []):
86
86
  trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
87
87
  await automation.build_automation(trigger, [], conf)
@@ -143,6 +143,8 @@ _MEDIA_PLAYER_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
143
143
  }
144
144
  )
145
145
 
146
+ _MEDIA_PLAYER_SCHEMA.add_extra(entity_duplicate_validator("media_player"))
147
+
146
148
 
147
149
  def media_player_schema(
148
150
  class_: MockObjClass,
@@ -166,7 +168,6 @@ def media_player_schema(
166
168
  MEDIA_PLAYER_SCHEMA = media_player_schema(MediaPlayer)
167
169
  MEDIA_PLAYER_SCHEMA.add_extra(cv.deprecated_schema_constant("media_player"))
168
170
 
169
-
170
171
  MEDIA_PLAYER_ACTION_SCHEMA = automation.maybe_simple_id(
171
172
  cv.Schema(
172
173
  {
@@ -449,11 +449,7 @@ async def to_code(config):
449
449
  cg.add_define("USE_MICRO_WAKE_WORD")
450
450
  cg.add_define("USE_OTA_STATE_CALLBACK")
451
451
 
452
- esp32.add_idf_component(
453
- name="esp-tflite-micro",
454
- repo="https://github.com/espressif/esp-tflite-micro",
455
- ref="v1.3.3.1",
456
- )
452
+ esp32.add_idf_component(name="espressif/esp-tflite-micro", ref="1.3.3~1")
457
453
 
458
454
  cg.add_build_flag("-DTF_LITE_STATIC_MEMORY")
459
455
  cg.add_build_flag("-DTF_LITE_DISABLE_X86_NEON")
@@ -27,7 +27,7 @@ void VADModel::log_model_config() {
27
27
  }
28
28
 
29
29
  bool StreamingModel::load_model_() {
30
- RAMAllocator<uint8_t> arena_allocator(RAMAllocator<uint8_t>::ALLOW_FAILURE);
30
+ RAMAllocator<uint8_t> arena_allocator;
31
31
 
32
32
  if (this->tensor_arena_ == nullptr) {
33
33
  this->tensor_arena_ = arena_allocator.allocate(this->tensor_arena_size_);
@@ -96,7 +96,7 @@ bool StreamingModel::load_model_() {
96
96
  void StreamingModel::unload_model() {
97
97
  this->interpreter_.reset();
98
98
 
99
- RAMAllocator<uint8_t> arena_allocator(RAMAllocator<uint8_t>::ALLOW_FAILURE);
99
+ RAMAllocator<uint8_t> arena_allocator;
100
100
 
101
101
  if (this->tensor_arena_ != nullptr) {
102
102
  arena_allocator.deallocate(this->tensor_arena_, this->tensor_arena_size_);
@@ -5,17 +5,15 @@ namespace microphone {
5
5
 
6
6
  void Microphone::add_data_callback(std::function<void(const std::vector<uint8_t> &)> &&data_callback) {
7
7
  std::function<void(const std::vector<uint8_t> &)> mute_handled_callback =
8
- [this, data_callback](const std::vector<uint8_t> &data) { data_callback(this->silence_audio_(data)); };
8
+ [this, data_callback](const std::vector<uint8_t> &data) {
9
+ if (this->mute_state_) {
10
+ data_callback(std::vector<uint8_t>(data.size(), 0));
11
+ } else {
12
+ data_callback(data);
13
+ };
14
+ };
9
15
  this->data_callbacks_.add(std::move(mute_handled_callback));
10
16
  }
11
17
 
12
- std::vector<uint8_t> Microphone::silence_audio_(std::vector<uint8_t> data) {
13
- if (this->mute_state_) {
14
- std::memset((void *) data.data(), 0, data.size());
15
- }
16
-
17
- return data;
18
- }
19
-
20
18
  } // namespace microphone
21
19
  } // namespace esphome
@@ -33,8 +33,6 @@ class Microphone {
33
33
  audio::AudioStreamInfo get_audio_stream_info() { return this->audio_stream_info_; }
34
34
 
35
35
  protected:
36
- std::vector<uint8_t> silence_audio_(std::vector<uint8_t> data);
37
-
38
36
  State state_{STATE_STOPPED};
39
37
  bool mute_state_{false};
40
38
 
@@ -472,3 +472,4 @@ async def to_code(config):
472
472
  cg.add(var.set_writer(lambda_))
473
473
  await display.register_display(var, config)
474
474
  await spi.register_spi_device(var, config)
475
+ cg.add(var.set_write_only(True))
@@ -39,7 +39,7 @@ void MMC5603Component::setup() {
39
39
  return;
40
40
  }
41
41
 
42
- if (id != MMC56X3_CHIP_ID) {
42
+ if (id != 0 && id != MMC56X3_CHIP_ID) { // ID is not reported correctly by all chips, 0 on some chips
43
43
  ESP_LOGCONFIG(TAG, "Chip Wrong");
44
44
  this->error_code_ = ID_REGISTERS;
45
45
  this->mark_failed();
@@ -90,15 +90,24 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
90
90
 
91
91
  } else {
92
92
  // data starts at 2 and length is 4 for read registers commands
93
- if (this->role == ModbusRole::SERVER && (function_code == 0x1 || function_code == 0x3 || function_code == 0x4)) {
94
- data_offset = 2;
95
- data_len = 4;
96
- }
97
-
98
- // the response for write command mirrors the requests and data starts at offset 2 instead of 3 for read commands
99
- if (function_code == 0x5 || function_code == 0x06 || function_code == 0xF || function_code == 0x10) {
100
- data_offset = 2;
101
- data_len = 4;
93
+ if (this->role == ModbusRole::SERVER) {
94
+ if (function_code == 0x1 || function_code == 0x3 || function_code == 0x4 || function_code == 0x6) {
95
+ data_offset = 2;
96
+ data_len = 4;
97
+ } else if (function_code == 0x10) {
98
+ if (at < 6) {
99
+ return true;
100
+ }
101
+ data_offset = 2;
102
+ // starting address (2 bytes) + quantity of registers (2 bytes) + byte count itself (1 byte) + actual byte count
103
+ data_len = 2 + 2 + 1 + raw[6];
104
+ }
105
+ } else {
106
+ // the response for write command mirrors the requests and data starts at offset 2 instead of 3 for read commands
107
+ if (function_code == 0x5 || function_code == 0x06 || function_code == 0xF || function_code == 0x10) {
108
+ data_offset = 2;
109
+ data_len = 4;
110
+ }
102
111
  }
103
112
 
104
113
  // Error ( msb indicates error )
@@ -132,6 +141,7 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
132
141
  bool found = false;
133
142
  for (auto *device : this->devices_) {
134
143
  if (device->address_ == address) {
144
+ found = true;
135
145
  // Is it an error response?
136
146
  if ((function_code & 0x80) == 0x80) {
137
147
  ESP_LOGD(TAG, "Modbus error function code: 0x%X exception: %d", function_code, raw[2]);
@@ -141,13 +151,21 @@ bool Modbus::parse_modbus_byte_(uint8_t byte) {
141
151
  // Ignore modbus exception not related to a pending command
142
152
  ESP_LOGD(TAG, "Ignoring Modbus error - not expecting a response");
143
153
  }
144
- } else if (this->role == ModbusRole::SERVER && (function_code == 0x3 || function_code == 0x4)) {
145
- device->on_modbus_read_registers(function_code, uint16_t(data[1]) | (uint16_t(data[0]) << 8),
146
- uint16_t(data[3]) | (uint16_t(data[2]) << 8));
147
- } else {
148
- device->on_modbus_data(data);
154
+ continue;
149
155
  }
150
- found = true;
156
+ if (this->role == ModbusRole::SERVER) {
157
+ if (function_code == 0x3 || function_code == 0x4) {
158
+ device->on_modbus_read_registers(function_code, uint16_t(data[1]) | (uint16_t(data[0]) << 8),
159
+ uint16_t(data[3]) | (uint16_t(data[2]) << 8));
160
+ continue;
161
+ }
162
+ if (function_code == 0x6 || function_code == 0x10) {
163
+ device->on_modbus_write_registers(function_code, data);
164
+ continue;
165
+ }
166
+ }
167
+ // fallthrough for other function codes
168
+ device->on_modbus_data(data);
151
169
  }
152
170
  }
153
171
  waiting_for_response = 0;
@@ -59,11 +59,20 @@ class ModbusDevice {
59
59
  virtual void on_modbus_data(const std::vector<uint8_t> &data) = 0;
60
60
  virtual void on_modbus_error(uint8_t function_code, uint8_t exception_code) {}
61
61
  virtual void on_modbus_read_registers(uint8_t function_code, uint16_t start_address, uint16_t number_of_registers){};
62
+ virtual void on_modbus_write_registers(uint8_t function_code, const std::vector<uint8_t> &data){};
62
63
  void send(uint8_t function, uint16_t start_address, uint16_t number_of_entities, uint8_t payload_len = 0,
63
64
  const uint8_t *payload = nullptr) {
64
65
  this->parent_->send(this->address_, function, start_address, number_of_entities, payload_len, payload);
65
66
  }
66
67
  void send_raw(const std::vector<uint8_t> &payload) { this->parent_->send_raw(payload); }
68
+ void send_error(uint8_t function_code, uint8_t exception_code) {
69
+ std::vector<uint8_t> error_response;
70
+ error_response.reserve(3);
71
+ error_response.push_back(this->address_);
72
+ error_response.push_back(function_code | 0x80);
73
+ error_response.push_back(exception_code);
74
+ this->send_raw(error_response);
75
+ }
67
76
  // If more than one device is connected block sending a new command before a response is received
68
77
  bool waiting_for_response() { return parent_->waiting_for_response != 0; }
69
78