esphome 2025.8.4__py3-none-any.whl → 2025.9.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 (369) hide show
  1. esphome/__main__.py +177 -105
  2. esphome/components/absolute_humidity/absolute_humidity.cpp +3 -5
  3. esphome/components/adc/__init__.py +1 -26
  4. esphome/components/adc/adc_sensor_esp32.cpp +29 -6
  5. esphome/components/adc/sensor.py +20 -0
  6. esphome/components/ade7880/ade7880.cpp +1 -1
  7. esphome/components/ags10/ags10.cpp +3 -18
  8. esphome/components/ags10/ags10.h +2 -12
  9. esphome/components/aht10/aht10.cpp +3 -3
  10. esphome/components/airthings_ble/__init__.py +2 -2
  11. esphome/components/alarm_control_panel/__init__.py +2 -2
  12. esphome/components/am2315c/am2315c.cpp +1 -17
  13. esphome/components/am2315c/am2315c.h +2 -3
  14. esphome/components/api/__init__.py +2 -2
  15. esphome/components/api/api_connection.cpp +38 -34
  16. esphome/components/api/api_connection.h +20 -40
  17. esphome/components/api/api_frame_helper.cpp +25 -25
  18. esphome/components/api/api_frame_helper.h +3 -3
  19. esphome/components/api/api_frame_helper_noise.cpp +75 -40
  20. esphome/components/api/api_frame_helper_noise.h +3 -7
  21. esphome/components/api/api_frame_helper_plaintext.cpp +17 -4
  22. esphome/components/api/api_frame_helper_plaintext.h +1 -4
  23. esphome/components/api/api_pb2.cpp +12 -2
  24. esphome/components/api/api_pb2.h +144 -143
  25. esphome/components/api/api_pb2_dump.cpp +6 -1
  26. esphome/components/api/api_pb2_service.cpp +0 -14
  27. esphome/components/api/api_pb2_service.h +1 -3
  28. esphome/components/api/client.py +5 -3
  29. esphome/components/api/proto.cpp +33 -37
  30. esphome/components/async_tcp/__init__.py +2 -2
  31. esphome/components/atm90e26/sensor.py +2 -0
  32. esphome/components/atm90e32/sensor.py +4 -2
  33. esphome/components/audio_adc/__init__.py +2 -2
  34. esphome/components/audio_dac/__init__.py +2 -2
  35. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +1 -1
  36. esphome/components/bedjet/bedjet_hub.cpp +1 -1
  37. esphome/components/binary_sensor/__init__.py +2 -2
  38. esphome/components/binary_sensor/binary_sensor.cpp +13 -0
  39. esphome/components/binary_sensor/binary_sensor.h +4 -7
  40. esphome/components/bl0940/__init__.py +6 -1
  41. esphome/components/bl0940/bl0940.cpp +178 -41
  42. esphome/components/bl0940/bl0940.h +121 -76
  43. esphome/components/bl0940/button/__init__.py +27 -0
  44. esphome/components/bl0940/button/calibration_reset_button.cpp +20 -0
  45. esphome/components/bl0940/button/calibration_reset_button.h +19 -0
  46. esphome/components/bl0940/number/__init__.py +94 -0
  47. esphome/components/bl0940/number/calibration_number.cpp +29 -0
  48. esphome/components/bl0940/number/calibration_number.h +26 -0
  49. esphome/components/bl0940/sensor.py +151 -2
  50. esphome/components/bl0942/bl0942.cpp +1 -1
  51. esphome/components/ble_client/output/__init__.py +4 -4
  52. esphome/components/bluetooth_proxy/__init__.py +1 -1
  53. esphome/components/bluetooth_proxy/bluetooth_connection.h +1 -1
  54. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +15 -7
  55. esphome/components/bluetooth_proxy/bluetooth_proxy.h +6 -3
  56. esphome/components/button/__init__.py +2 -2
  57. esphome/components/button/button.cpp +13 -0
  58. esphome/components/button/button.h +4 -7
  59. esphome/components/camera/buffer.h +18 -0
  60. esphome/components/camera/buffer_impl.cpp +20 -0
  61. esphome/components/camera/buffer_impl.h +26 -0
  62. esphome/components/camera/camera.h +43 -0
  63. esphome/components/camera/encoder.h +69 -0
  64. esphome/components/camera_encoder/__init__.py +62 -0
  65. esphome/components/camera_encoder/encoder_buffer_impl.cpp +23 -0
  66. esphome/components/camera_encoder/encoder_buffer_impl.h +25 -0
  67. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.cpp +82 -0
  68. esphome/components/camera_encoder/esp32_camera_jpeg_encoder.h +39 -0
  69. esphome/components/captive_portal/__init__.py +2 -2
  70. esphome/components/captive_portal/captive_index.h +77 -97
  71. esphome/components/captive_portal/captive_portal.cpp +35 -12
  72. esphome/components/captive_portal/captive_portal.h +3 -3
  73. esphome/components/ccs811/ccs811.cpp +3 -3
  74. esphome/components/climate/__init__.py +2 -2
  75. esphome/components/climate/climate.cpp +1 -1
  76. esphome/components/cover/__init__.py +5 -5
  77. esphome/components/cover/cover.cpp +1 -1
  78. esphome/components/cover/cover.h +2 -2
  79. esphome/components/dallas_temp/dallas_temp.cpp +2 -2
  80. esphome/components/datetime/__init__.py +2 -2
  81. esphome/components/datetime/date_entity.h +2 -2
  82. esphome/components/datetime/datetime_entity.h +2 -2
  83. esphome/components/datetime/time_entity.h +2 -2
  84. esphome/components/debug/debug_esp32.cpp +1 -1
  85. esphome/components/display/__init__.py +4 -4
  86. esphome/components/duty_time/duty_time_sensor.cpp +1 -1
  87. esphome/components/esp32/__init__.py +0 -5
  88. esphome/components/esp32/gpio.cpp +27 -23
  89. esphome/components/esp32/gpio.h +26 -11
  90. esphome/components/esp32/preferences.cpp +8 -4
  91. esphome/components/esp32_ble/__init__.py +7 -2
  92. esphome/components/esp32_ble/ble_uuid.cpp +30 -9
  93. esphome/components/esp32_ble_beacon/esp32_ble_beacon.cpp +4 -3
  94. esphome/components/esp32_ble_client/ble_client_base.cpp +7 -3
  95. esphome/components/esp32_ble_client/ble_client_base.h +8 -5
  96. esphome/components/esp32_ble_tracker/__init__.py +2 -2
  97. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +11 -47
  98. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +2 -14
  99. esphome/components/esp8266/__init__.py +2 -2
  100. esphome/components/esp8266/core.cpp +2 -2
  101. esphome/components/esp8266/gpio.py +4 -4
  102. esphome/components/esp8266/preferences.cpp +30 -28
  103. esphome/components/esphome/ota/__init__.py +2 -2
  104. esphome/components/esphome/ota/ota_esphome.cpp +21 -19
  105. esphome/components/esphome/ota/ota_esphome.h +6 -5
  106. esphome/components/ethernet/__init__.py +18 -2
  107. esphome/components/ethernet/ethernet_component.cpp +53 -3
  108. esphome/components/ethernet/ethernet_component.h +4 -0
  109. esphome/components/event/__init__.py +2 -2
  110. esphome/components/event/event.h +4 -4
  111. esphome/components/factory_reset/button/factory_reset_button.cpp +18 -1
  112. esphome/components/factory_reset/button/factory_reset_button.h +6 -1
  113. esphome/components/factory_reset/switch/factory_reset_switch.cpp +18 -1
  114. esphome/components/factory_reset/switch/factory_reset_switch.h +5 -1
  115. esphome/components/fan/__init__.py +2 -2
  116. esphome/components/fan/fan.cpp +2 -1
  117. esphome/components/gdk101/gdk101.cpp +4 -4
  118. esphome/components/globals/__init__.py +2 -2
  119. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +19 -18
  120. esphome/components/gpio_expander/cached_gpio.h +36 -16
  121. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -5
  122. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  123. esphome/components/haier/haier_base.cpp +1 -1
  124. esphome/components/haier/hon_climate.cpp +1 -1
  125. esphome/components/hlw8012/hlw8012.cpp +5 -5
  126. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +4 -4
  127. esphome/components/host/preferences.h +3 -2
  128. esphome/components/hte501/hte501.cpp +3 -21
  129. esphome/components/hte501/hte501.h +2 -3
  130. esphome/components/http_request/ota/__init__.py +2 -2
  131. esphome/components/i2c/__init__.py +2 -2
  132. esphome/components/i2c/i2c.cpp +13 -9
  133. esphome/components/i2c/i2c_bus.h +36 -6
  134. esphome/components/i2s_audio/__init__.py +8 -2
  135. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  136. esphome/components/i2s_audio/microphone/__init__.py +1 -1
  137. esphome/components/i2s_audio/speaker/__init__.py +1 -1
  138. esphome/components/ina2xx_base/__init__.py +4 -2
  139. esphome/components/inkplate/__init__.py +1 -0
  140. esphome/components/inkplate/const.py +105 -0
  141. esphome/components/inkplate/display.py +238 -0
  142. esphome/components/{inkplate6 → inkplate}/inkplate.cpp +156 -74
  143. esphome/components/{inkplate6 → inkplate}/inkplate.h +28 -68
  144. esphome/components/inkplate6/__init__.py +0 -1
  145. esphome/components/inkplate6/display.py +2 -211
  146. esphome/components/integration/integration_sensor.cpp +1 -1
  147. esphome/components/json/__init__.py +2 -2
  148. esphome/components/lc709203f/lc709203f.cpp +4 -17
  149. esphome/components/lc709203f/lc709203f.h +2 -3
  150. esphome/components/ld2420/text_sensor/{text_sensor.cpp → ld2420_text_sensor.cpp} +1 -1
  151. esphome/components/ld2450/ld2450.cpp +1 -1
  152. esphome/components/libretiny/preferences.cpp +13 -5
  153. esphome/components/light/__init__.py +2 -2
  154. esphome/components/light/addressable_light_effect.h +7 -0
  155. esphome/components/light/base_light_effects.h +8 -0
  156. esphome/components/light/light_call.cpp +22 -20
  157. esphome/components/light/light_effect.cpp +36 -0
  158. esphome/components/light/light_effect.h +14 -0
  159. esphome/components/light/light_json_schema.cpp +9 -1
  160. esphome/components/light/light_state.cpp +2 -2
  161. esphome/components/light/light_state.h +38 -0
  162. esphome/components/lock/__init__.py +2 -2
  163. esphome/components/lock/lock.h +2 -2
  164. esphome/components/logger/__init__.py +2 -2
  165. esphome/components/logger/logger.cpp +25 -4
  166. esphome/components/logger/logger.h +1 -1
  167. esphome/components/logger/logger_esp32.cpp +16 -8
  168. esphome/components/logger/logger_esp8266.cpp +11 -3
  169. esphome/components/logger/logger_libretiny.cpp +13 -3
  170. esphome/components/logger/logger_rp2040.cpp +14 -3
  171. esphome/components/logger/logger_zephyr.cpp +15 -4
  172. esphome/components/lvgl/defines.py +1 -0
  173. esphome/components/lvgl/hello_world.py +96 -33
  174. esphome/components/lvgl/number/lvgl_number.h +1 -1
  175. esphome/components/lvgl/select/lvgl_select.h +1 -1
  176. esphome/components/lvgl/widgets/__init__.py +0 -1
  177. esphome/components/lvgl/widgets/spinbox.py +20 -11
  178. esphome/components/m5stack_8angle/binary_sensor/m5stack_8angle_binary_sensor.cpp +1 -1
  179. esphome/components/m5stack_8angle/sensor/m5stack_8angle_sensor.cpp +1 -1
  180. esphome/components/mapping/__init__.py +13 -5
  181. esphome/components/mapping/mapping.h +69 -0
  182. esphome/components/max17043/max17043.cpp +2 -2
  183. esphome/components/mcp23016/__init__.py +1 -0
  184. esphome/components/mcp23016/mcp23016.cpp +20 -5
  185. esphome/components/mcp23016/mcp23016.h +10 -4
  186. esphome/components/mcp23x08_base/mcp23x08_base.cpp +1 -1
  187. esphome/components/mcp23x17_base/mcp23x17_base.cpp +2 -2
  188. esphome/components/md5/md5.cpp +3 -2
  189. esphome/components/mdns/__init__.py +2 -2
  190. esphome/components/mdns/mdns_component.cpp +145 -54
  191. esphome/components/media_player/__init__.py +2 -2
  192. esphome/components/micro_wake_word/__init__.py +2 -2
  193. esphome/components/microphone/__init__.py +2 -2
  194. esphome/components/mipi/__init__.py +77 -33
  195. esphome/components/mipi_rgb/__init__.py +2 -0
  196. esphome/components/mipi_rgb/display.py +321 -0
  197. esphome/components/mipi_rgb/mipi_rgb.cpp +388 -0
  198. esphome/components/mipi_rgb/mipi_rgb.h +127 -0
  199. esphome/components/mipi_rgb/models/guition.py +24 -0
  200. esphome/components/mipi_rgb/models/lilygo.py +228 -0
  201. esphome/components/mipi_rgb/models/rpi.py +9 -0
  202. esphome/components/mipi_rgb/models/st7701s.py +214 -0
  203. esphome/components/mipi_rgb/models/waveshare.py +64 -0
  204. esphome/components/mipi_spi/models/jc.py +229 -0
  205. esphome/components/mlx90614/mlx90614.cpp +1 -16
  206. esphome/components/mlx90614/mlx90614.h +0 -1
  207. esphome/components/mqtt/__init__.py +2 -2
  208. esphome/components/mqtt/mqtt_client.cpp +1 -1
  209. esphome/components/mqtt/mqtt_sensor.cpp +7 -2
  210. esphome/components/ms5611/ms5611.cpp +7 -6
  211. esphome/components/network/__init__.py +2 -2
  212. esphome/components/nextion/nextion_upload.cpp +4 -1
  213. esphome/components/nrf52/__init__.py +49 -6
  214. esphome/components/nrf52/const.py +1 -0
  215. esphome/components/nrf52/dfu.cpp +51 -0
  216. esphome/components/nrf52/dfu.h +24 -0
  217. esphome/components/ntc/ntc.cpp +1 -1
  218. esphome/components/number/__init__.py +2 -2
  219. esphome/components/number/automation.cpp +1 -1
  220. esphome/components/number/number.cpp +21 -0
  221. esphome/components/number/number.h +4 -13
  222. esphome/components/opentherm/hub.h +6 -6
  223. esphome/components/opentherm/number/{number.cpp → opentherm_number.cpp} +2 -2
  224. esphome/components/opentherm/output/{output.cpp → opentherm_output.cpp} +1 -1
  225. esphome/components/opentherm/switch/{switch.cpp → opentherm_switch.cpp} +1 -1
  226. esphome/components/openthread/openthread.cpp +41 -7
  227. esphome/components/openthread/openthread.h +11 -0
  228. esphome/components/ota/__init__.py +2 -2
  229. esphome/components/pca6416a/__init__.py +1 -0
  230. esphome/components/pca6416a/pca6416a.cpp +20 -5
  231. esphome/components/pca6416a/pca6416a.h +12 -5
  232. esphome/components/pca9554/__init__.py +2 -1
  233. esphome/components/pca9554/pca9554.cpp +12 -18
  234. esphome/components/pca9554/pca9554.h +10 -9
  235. esphome/components/pcf8574/__init__.py +1 -0
  236. esphome/components/pcf8574/pcf8574.cpp +14 -5
  237. esphome/components/pcf8574/pcf8574.h +13 -6
  238. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +7 -7
  239. esphome/components/pipsolar/__init__.py +3 -3
  240. esphome/components/pipsolar/output/__init__.py +4 -4
  241. esphome/components/pulse_width/pulse_width.cpp +2 -2
  242. esphome/components/qmp6988/qmp6988.cpp +81 -126
  243. esphome/components/qmp6988/qmp6988.h +31 -37
  244. esphome/components/radon_eye_ble/__init__.py +2 -2
  245. esphome/components/remote_base/__init__.py +6 -8
  246. esphome/components/rotary_encoder/rotary_encoder.cpp +1 -1
  247. esphome/components/rp2040/__init__.py +2 -2
  248. esphome/components/runtime_stats/runtime_stats.cpp +10 -23
  249. esphome/components/runtime_stats/runtime_stats.h +4 -10
  250. esphome/components/safe_mode/__init__.py +2 -2
  251. esphome/components/safe_mode/safe_mode.cpp +33 -31
  252. esphome/components/script/script.cpp +6 -0
  253. esphome/components/script/script.h +19 -5
  254. esphome/components/sdm_meter/sensor.py +3 -1
  255. esphome/components/select/__init__.py +2 -2
  256. esphome/components/select/select.cpp +3 -3
  257. esphome/components/select/select.h +2 -2
  258. esphome/components/select/select_call.cpp +1 -1
  259. esphome/components/sen5x/sen5x.cpp +57 -55
  260. esphome/components/sen5x/sen5x.h +21 -15
  261. esphome/components/sen5x/sensor.py +67 -44
  262. esphome/components/sensirion_common/i2c_sensirion.cpp +18 -47
  263. esphome/components/sensirion_common/i2c_sensirion.h +39 -55
  264. esphome/components/sensor/__init__.py +2 -2
  265. esphome/components/sensor/automation.h +1 -1
  266. esphome/components/sensor/sensor.cpp +34 -6
  267. esphome/components/sensor/sensor.h +4 -21
  268. esphome/components/sgp30/sgp30.cpp +34 -35
  269. esphome/components/sgp30/sgp30.h +11 -10
  270. esphome/components/sgp4x/sgp4x.cpp +2 -2
  271. esphome/components/shelly_dimmer/light.py +7 -7
  272. esphome/components/sht4x/sht4x.cpp +1 -1
  273. esphome/components/sntp/sntp_component.cpp +36 -9
  274. esphome/components/sntp/sntp_component.h +7 -0
  275. esphome/components/sound_level/sound_level.cpp +1 -1
  276. esphome/components/speaker/__init__.py +2 -2
  277. esphome/components/speaker/media_player/__init__.py +2 -2
  278. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -1
  279. esphome/components/spi/__init__.py +2 -2
  280. esphome/components/sprinkler/sprinkler.cpp +1 -1
  281. esphome/components/sps30/sps30.cpp +18 -23
  282. esphome/components/sps30/sps30.h +3 -3
  283. esphome/components/status_led/__init__.py +2 -2
  284. esphome/components/stepper/__init__.py +2 -2
  285. esphome/components/switch/__init__.py +2 -2
  286. esphome/components/switch/switch.cpp +5 -5
  287. esphome/components/sx1509/__init__.py +1 -1
  288. esphome/components/sx1509/sx1509.cpp +12 -7
  289. esphome/components/sx1509/sx1509.h +11 -4
  290. esphome/components/tca9555/tca9555.cpp +5 -5
  291. esphome/components/tee501/tee501.cpp +2 -21
  292. esphome/components/tee501/tee501.h +2 -4
  293. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +1 -1
  294. esphome/components/template/datetime/template_date.cpp +1 -1
  295. esphome/components/template/datetime/template_datetime.cpp +2 -2
  296. esphome/components/template/datetime/template_time.cpp +1 -1
  297. esphome/components/template/number/template_number.cpp +1 -1
  298. esphome/components/template/select/template_select.cpp +1 -1
  299. esphome/components/template/text/template_text.cpp +1 -1
  300. esphome/components/text/__init__.py +2 -2
  301. esphome/components/text/text.h +2 -2
  302. esphome/components/text_sensor/__init__.py +2 -2
  303. esphome/components/text_sensor/text_sensor.h +4 -4
  304. esphome/components/thermostat/climate.py +11 -7
  305. esphome/components/thermostat/thermostat_climate.cpp +237 -206
  306. esphome/components/thermostat/thermostat_climate.h +52 -41
  307. esphome/components/time/__init__.py +2 -2
  308. esphome/components/tmp1075/tmp1075.cpp +1 -1
  309. esphome/components/total_daily_energy/total_daily_energy.cpp +1 -1
  310. esphome/components/touchscreen/__init__.py +2 -2
  311. esphome/components/tuya/number/tuya_number.cpp +1 -1
  312. esphome/components/udp/udp_component.cpp +3 -3
  313. esphome/components/ufire_ec/ufire_ec.cpp +4 -4
  314. esphome/components/ufire_ise/ufire_ise.cpp +4 -4
  315. esphome/components/update/__init__.py +2 -2
  316. esphome/components/usb_uart/usb_uart.cpp +1 -1
  317. esphome/components/valve/__init__.py +5 -5
  318. esphome/components/valve/valve.cpp +1 -1
  319. esphome/components/valve/valve.h +2 -2
  320. esphome/components/wake_on_lan/wake_on_lan.cpp +2 -2
  321. esphome/components/waveshare_epaper/waveshare_213v3.cpp +1 -1
  322. esphome/components/web_server/__init__.py +2 -2
  323. esphome/components/web_server/ota/__init__.py +2 -2
  324. esphome/components/web_server/ota/ota_web_server.cpp +11 -0
  325. esphome/components/web_server/server_index_v2.h +149 -149
  326. esphome/components/web_server/web_server.cpp +58 -12
  327. esphome/components/web_server_base/__init__.py +2 -2
  328. esphome/components/wifi/__init__.py +5 -5
  329. esphome/components/wifi/wifi_component.cpp +4 -4
  330. esphome/components/wifi/wifi_component_esp_idf.cpp +2 -0
  331. esphome/components/wifi_info/wifi_info_text_sensor.h +3 -2
  332. esphome/config_validation.py +2 -2
  333. esphome/const.py +3 -1
  334. esphome/core/__init__.py +1 -0
  335. esphome/core/application.cpp +89 -51
  336. esphome/core/application.h +1 -0
  337. esphome/core/component.cpp +41 -19
  338. esphome/core/component.h +17 -13
  339. esphome/core/config.py +7 -7
  340. esphome/core/defines.h +5 -0
  341. esphome/core/entity_base.cpp +22 -8
  342. esphome/core/entity_base.h +43 -0
  343. esphome/core/helpers.cpp +34 -20
  344. esphome/core/helpers.h +33 -3
  345. esphome/core/ring_buffer.cpp +6 -2
  346. esphome/core/ring_buffer.h +2 -1
  347. esphome/core/scheduler.cpp +178 -97
  348. esphome/core/scheduler.h +67 -36
  349. esphome/core/time.cpp +6 -20
  350. esphome/coroutine.py +80 -3
  351. esphome/cpp_generator.py +13 -0
  352. esphome/cpp_helpers.py +2 -2
  353. esphome/dashboard/web_server.py +69 -15
  354. esphome/espota2.py +13 -6
  355. esphome/helpers.py +68 -83
  356. esphome/resolver.py +67 -0
  357. esphome/util.py +9 -6
  358. esphome/wizard.py +81 -34
  359. esphome/writer.py +13 -0
  360. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/METADATA +9 -9
  361. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/RECORD +369 -338
  362. /esphome/components/ld2420/text_sensor/{text_sensor.h → ld2420_text_sensor.h} +0 -0
  363. /esphome/components/opentherm/number/{number.h → opentherm_number.h} +0 -0
  364. /esphome/components/opentherm/output/{output.h → opentherm_output.h} +0 -0
  365. /esphome/components/opentherm/switch/{switch.h → opentherm_switch.h} +0 -0
  366. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/WHEEL +0 -0
  367. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/entry_points.txt +0 -0
  368. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/licenses/LICENSE +0 -0
  369. {esphome-2025.8.4.dist-info → esphome-2025.9.0.dist-info}/top_level.txt +0 -0
@@ -1110,7 +1110,11 @@ void HomeAssistantStateResponse::dump_to(std::string &out) const {
1110
1110
  }
1111
1111
  #endif
1112
1112
  void GetTimeRequest::dump_to(std::string &out) const { out.append("GetTimeRequest {}"); }
1113
- void GetTimeResponse::dump_to(std::string &out) const { dump_field(out, "epoch_seconds", this->epoch_seconds); }
1113
+ void GetTimeResponse::dump_to(std::string &out) const {
1114
+ MessageDumpHelper helper(out, "GetTimeResponse");
1115
+ dump_field(out, "epoch_seconds", this->epoch_seconds);
1116
+ dump_field(out, "timezone", this->timezone);
1117
+ }
1114
1118
  #ifdef USE_API_SERVICES
1115
1119
  void ListEntitiesServicesArgument::dump_to(std::string &out) const {
1116
1120
  MessageDumpHelper helper(out, "ListEntitiesServicesArgument");
@@ -1704,6 +1708,7 @@ void BluetoothScannerStateResponse::dump_to(std::string &out) const {
1704
1708
  MessageDumpHelper helper(out, "BluetoothScannerStateResponse");
1705
1709
  dump_field(out, "state", static_cast<enums::BluetoothScannerState>(this->state));
1706
1710
  dump_field(out, "mode", static_cast<enums::BluetoothScannerMode>(this->mode));
1711
+ dump_field(out, "configured_mode", static_cast<enums::BluetoothScannerMode>(this->configured_mode));
1707
1712
  }
1708
1713
  void BluetoothScannerSetModeRequest::dump_to(std::string &out) const {
1709
1714
  MessageDumpHelper helper(out, "BluetoothScannerSetModeRequest");
@@ -160,15 +160,6 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type,
160
160
  break;
161
161
  }
162
162
  #endif
163
- case GetTimeRequest::MESSAGE_TYPE: {
164
- GetTimeRequest msg;
165
- // Empty message: no decode needed
166
- #ifdef HAS_PROTO_MESSAGE_DUMP
167
- ESP_LOGVV(TAG, "on_get_time_request: %s", msg.dump().c_str());
168
- #endif
169
- this->on_get_time_request(msg);
170
- break;
171
- }
172
163
  case GetTimeResponse::MESSAGE_TYPE: {
173
164
  GetTimeResponse msg;
174
165
  msg.decode(msg_data, msg_size);
@@ -656,11 +647,6 @@ void APIServerConnection::on_subscribe_home_assistant_states_request(const Subsc
656
647
  }
657
648
  }
658
649
  #endif
659
- void APIServerConnection::on_get_time_request(const GetTimeRequest &msg) {
660
- if (this->check_connection_setup_() && !this->send_get_time_response(msg)) {
661
- this->on_fatal_error();
662
- }
663
- }
664
650
  #ifdef USE_API_SERVICES
665
651
  void APIServerConnection::on_execute_service_request(const ExecuteServiceRequest &msg) {
666
652
  if (this->check_authenticated_()) {
@@ -71,7 +71,7 @@ class APIServerConnectionBase : public ProtoService {
71
71
  #ifdef USE_API_HOMEASSISTANT_STATES
72
72
  virtual void on_home_assistant_state_response(const HomeAssistantStateResponse &value){};
73
73
  #endif
74
- virtual void on_get_time_request(const GetTimeRequest &value){};
74
+
75
75
  virtual void on_get_time_response(const GetTimeResponse &value){};
76
76
 
77
77
  #ifdef USE_API_SERVICES
@@ -226,7 +226,6 @@ class APIServerConnection : public APIServerConnectionBase {
226
226
  #ifdef USE_API_HOMEASSISTANT_STATES
227
227
  virtual void subscribe_home_assistant_states(const SubscribeHomeAssistantStatesRequest &msg) = 0;
228
228
  #endif
229
- virtual bool send_get_time_response(const GetTimeRequest &msg) = 0;
230
229
  #ifdef USE_API_SERVICES
231
230
  virtual void execute_service(const ExecuteServiceRequest &msg) = 0;
232
231
  #endif
@@ -348,7 +347,6 @@ class APIServerConnection : public APIServerConnectionBase {
348
347
  #ifdef USE_API_HOMEASSISTANT_STATES
349
348
  void on_subscribe_home_assistant_states_request(const SubscribeHomeAssistantStatesRequest &msg) override;
350
349
  #endif
351
- void on_get_time_request(const GetTimeRequest &msg) override;
352
350
  #ifdef USE_API_SERVICES
353
351
  void on_execute_service_request(const ExecuteServiceRequest &msg) override;
354
352
  #endif
@@ -62,9 +62,11 @@ async def async_run_logs(config: dict[str, Any], addresses: list[str]) -> None:
62
62
  time_ = datetime.now()
63
63
  message: bytes = msg.message
64
64
  text = message.decode("utf8", "backslashreplace")
65
- for parsed_msg in parse_log_message(
66
- text, f"[{time_.hour:02}:{time_.minute:02}:{time_.second:02}]"
67
- ):
65
+ nanoseconds = time_.microsecond // 1000
66
+ timestamp = (
67
+ f"[{time_.hour:02}:{time_.minute:02}:{time_.second:02}.{nanoseconds:03}]"
68
+ )
69
+ for parsed_msg in parse_log_message(text, timestamp):
68
70
  print(parsed_msg.replace("\033", "\\033") if dashboard else parsed_msg)
69
71
 
70
72
  stop = await async_run(cli, on_log, name=name)
@@ -8,74 +8,70 @@ namespace esphome::api {
8
8
  static const char *const TAG = "api.proto";
9
9
 
10
10
  void ProtoDecodableMessage::decode(const uint8_t *buffer, size_t length) {
11
- uint32_t i = 0;
12
- bool error = false;
13
- while (i < length) {
11
+ const uint8_t *ptr = buffer;
12
+ const uint8_t *end = buffer + length;
13
+
14
+ while (ptr < end) {
14
15
  uint32_t consumed;
15
- auto res = ProtoVarInt::parse(&buffer[i], length - i, &consumed);
16
+
17
+ // Parse field header
18
+ auto res = ProtoVarInt::parse(ptr, end - ptr, &consumed);
16
19
  if (!res.has_value()) {
17
- ESP_LOGV(TAG, "Invalid field start at %" PRIu32, i);
18
- break;
20
+ ESP_LOGV(TAG, "Invalid field start at offset %ld", (long) (ptr - buffer));
21
+ return;
19
22
  }
20
23
 
21
- uint32_t field_type = (res->as_uint32()) & 0b111;
22
- uint32_t field_id = (res->as_uint32()) >> 3;
23
- i += consumed;
24
+ uint32_t tag = res->as_uint32();
25
+ uint32_t field_type = tag & 0b111;
26
+ uint32_t field_id = tag >> 3;
27
+ ptr += consumed;
24
28
 
25
29
  switch (field_type) {
26
30
  case 0: { // VarInt
27
- res = ProtoVarInt::parse(&buffer[i], length - i, &consumed);
31
+ res = ProtoVarInt::parse(ptr, end - ptr, &consumed);
28
32
  if (!res.has_value()) {
29
- ESP_LOGV(TAG, "Invalid VarInt at %" PRIu32, i);
30
- error = true;
31
- break;
33
+ ESP_LOGV(TAG, "Invalid VarInt at offset %ld", (long) (ptr - buffer));
34
+ return;
32
35
  }
33
36
  if (!this->decode_varint(field_id, *res)) {
34
37
  ESP_LOGV(TAG, "Cannot decode VarInt field %" PRIu32 " with value %" PRIu32 "!", field_id, res->as_uint32());
35
38
  }
36
- i += consumed;
39
+ ptr += consumed;
37
40
  break;
38
41
  }
39
42
  case 2: { // Length-delimited
40
- res = ProtoVarInt::parse(&buffer[i], length - i, &consumed);
43
+ res = ProtoVarInt::parse(ptr, end - ptr, &consumed);
41
44
  if (!res.has_value()) {
42
- ESP_LOGV(TAG, "Invalid Length Delimited at %" PRIu32, i);
43
- error = true;
44
- break;
45
+ ESP_LOGV(TAG, "Invalid Length Delimited at offset %ld", (long) (ptr - buffer));
46
+ return;
45
47
  }
46
48
  uint32_t field_length = res->as_uint32();
47
- i += consumed;
48
- if (field_length > length - i) {
49
- ESP_LOGV(TAG, "Out-of-bounds Length Delimited at %" PRIu32, i);
50
- error = true;
51
- break;
49
+ ptr += consumed;
50
+ if (ptr + field_length > end) {
51
+ ESP_LOGV(TAG, "Out-of-bounds Length Delimited at offset %ld", (long) (ptr - buffer));
52
+ return;
52
53
  }
53
- if (!this->decode_length(field_id, ProtoLengthDelimited(&buffer[i], field_length))) {
54
+ if (!this->decode_length(field_id, ProtoLengthDelimited(ptr, field_length))) {
54
55
  ESP_LOGV(TAG, "Cannot decode Length Delimited field %" PRIu32 "!", field_id);
55
56
  }
56
- i += field_length;
57
+ ptr += field_length;
57
58
  break;
58
59
  }
59
60
  case 5: { // 32-bit
60
- if (length - i < 4) {
61
- ESP_LOGV(TAG, "Out-of-bounds Fixed32-bit at %" PRIu32, i);
62
- error = true;
63
- break;
61
+ if (ptr + 4 > end) {
62
+ ESP_LOGV(TAG, "Out-of-bounds Fixed32-bit at offset %ld", (long) (ptr - buffer));
63
+ return;
64
64
  }
65
- uint32_t val = encode_uint32(buffer[i + 3], buffer[i + 2], buffer[i + 1], buffer[i]);
65
+ uint32_t val = encode_uint32(ptr[3], ptr[2], ptr[1], ptr[0]);
66
66
  if (!this->decode_32bit(field_id, Proto32Bit(val))) {
67
67
  ESP_LOGV(TAG, "Cannot decode 32-bit field %" PRIu32 " with value %" PRIu32 "!", field_id, val);
68
68
  }
69
- i += 4;
69
+ ptr += 4;
70
70
  break;
71
71
  }
72
72
  default:
73
- ESP_LOGV(TAG, "Invalid field type at %" PRIu32, i);
74
- error = true;
75
- break;
76
- }
77
- if (error) {
78
- break;
73
+ ESP_LOGV(TAG, "Invalid field type %u at offset %ld", field_type, (long) (ptr - buffer));
74
+ return;
79
75
  }
80
76
  }
81
77
  }
@@ -8,7 +8,7 @@ from esphome.const import (
8
8
  PLATFORM_LN882X,
9
9
  PLATFORM_RTL87XX,
10
10
  )
11
- from esphome.core import CORE, coroutine_with_priority
11
+ from esphome.core import CORE, CoroPriority, coroutine_with_priority
12
12
 
13
13
  CODEOWNERS = ["@esphome/core"]
14
14
 
@@ -27,7 +27,7 @@ CONFIG_SCHEMA = cv.All(
27
27
  )
28
28
 
29
29
 
30
- @coroutine_with_priority(200.0)
30
+ @coroutine_with_priority(CoroPriority.NETWORK_TRANSPORT)
31
31
  async def to_code(config):
32
32
  if CORE.is_esp32 or CORE.is_libretiny:
33
33
  # https://github.com/ESP32Async/AsyncTCP
@@ -16,6 +16,7 @@ from esphome.const import (
16
16
  DEVICE_CLASS_ENERGY,
17
17
  DEVICE_CLASS_POWER,
18
18
  DEVICE_CLASS_POWER_FACTOR,
19
+ DEVICE_CLASS_REACTIVE_POWER,
19
20
  DEVICE_CLASS_VOLTAGE,
20
21
  ICON_CURRENT_AC,
21
22
  ICON_LIGHTBULB,
@@ -78,6 +79,7 @@ CONFIG_SCHEMA = (
78
79
  unit_of_measurement=UNIT_VOLT_AMPS_REACTIVE,
79
80
  icon=ICON_LIGHTBULB,
80
81
  accuracy_decimals=2,
82
+ device_class=DEVICE_CLASS_REACTIVE_POWER,
81
83
  state_class=STATE_CLASS_MEASUREMENT,
82
84
  ),
83
85
  cv.Optional(CONF_POWER_FACTOR): sensor.sensor_schema(
@@ -17,10 +17,12 @@ from esphome.const import (
17
17
  CONF_REACTIVE_POWER,
18
18
  CONF_REVERSE_ACTIVE_ENERGY,
19
19
  CONF_VOLTAGE,
20
+ DEVICE_CLASS_APPARENT_POWER,
20
21
  DEVICE_CLASS_CURRENT,
21
22
  DEVICE_CLASS_ENERGY,
22
23
  DEVICE_CLASS_POWER,
23
24
  DEVICE_CLASS_POWER_FACTOR,
25
+ DEVICE_CLASS_REACTIVE_POWER,
24
26
  DEVICE_CLASS_TEMPERATURE,
25
27
  DEVICE_CLASS_VOLTAGE,
26
28
  ENTITY_CATEGORY_DIAGNOSTIC,
@@ -100,13 +102,13 @@ ATM90E32_PHASE_SCHEMA = cv.Schema(
100
102
  unit_of_measurement=UNIT_VOLT_AMPS_REACTIVE,
101
103
  icon=ICON_LIGHTBULB,
102
104
  accuracy_decimals=2,
103
- device_class=DEVICE_CLASS_POWER,
105
+ device_class=DEVICE_CLASS_REACTIVE_POWER,
104
106
  state_class=STATE_CLASS_MEASUREMENT,
105
107
  ),
106
108
  cv.Optional(CONF_APPARENT_POWER): sensor.sensor_schema(
107
109
  unit_of_measurement=UNIT_VOLT_AMPS,
108
110
  accuracy_decimals=2,
109
- device_class=DEVICE_CLASS_POWER,
111
+ device_class=DEVICE_CLASS_APPARENT_POWER,
110
112
  state_class=STATE_CLASS_MEASUREMENT,
111
113
  ),
112
114
  cv.Optional(CONF_POWER_FACTOR): sensor.sensor_schema(
@@ -2,7 +2,7 @@ from esphome import automation
2
2
  import esphome.codegen as cg
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import CONF_ID, CONF_MIC_GAIN
5
- from esphome.core import coroutine_with_priority
5
+ from esphome.core import CoroPriority, coroutine_with_priority
6
6
 
7
7
  CODEOWNERS = ["@kbx81"]
8
8
  IS_PLATFORM_COMPONENT = True
@@ -35,7 +35,7 @@ async def audio_adc_set_mic_gain_to_code(config, action_id, template_arg, args):
35
35
  return var
36
36
 
37
37
 
38
- @coroutine_with_priority(100.0)
38
+ @coroutine_with_priority(CoroPriority.CORE)
39
39
  async def to_code(config):
40
40
  cg.add_define("USE_AUDIO_ADC")
41
41
  cg.add_global(audio_adc_ns.using)
@@ -3,7 +3,7 @@ from esphome.automation import maybe_simple_id
3
3
  import esphome.codegen as cg
4
4
  import esphome.config_validation as cv
5
5
  from esphome.const import CONF_ID, CONF_VOLUME
6
- from esphome.core import coroutine_with_priority
6
+ from esphome.core import CoroPriority, coroutine_with_priority
7
7
 
8
8
  CODEOWNERS = ["@kbx81"]
9
9
  IS_PLATFORM_COMPONENT = True
@@ -51,7 +51,7 @@ async def audio_dac_set_volume_to_code(config, action_id, template_arg, args):
51
51
  return var
52
52
 
53
53
 
54
- @coroutine_with_priority(100.0)
54
+ @coroutine_with_priority(CoroPriority.CORE)
55
55
  async def to_code(config):
56
56
  cg.add_define("USE_AUDIO_DAC")
57
57
  cg.add_global(audio_dac_ns.using)
@@ -12,7 +12,7 @@ constexpr static const uint8_t AXS_READ_TOUCHPAD[11] = {0xb5, 0xab, 0xa5, 0x5a,
12
12
 
13
13
  #define ERROR_CHECK(err) \
14
14
  if ((err) != i2c::ERROR_OK) { \
15
- this->status_set_warning("Failed to communicate"); \
15
+ this->status_set_warning(LOG_STR("Failed to communicate")); \
16
16
  return; \
17
17
  }
18
18
 
@@ -493,7 +493,7 @@ void BedJetHub::dump_config() {
493
493
  " ble_client.app_id: %d\n"
494
494
  " ble_client.conn_id: %d",
495
495
  this->get_name().c_str(), this->parent()->app_id, this->parent()->get_conn_id());
496
- LOG_UPDATE_INTERVAL(this)
496
+ LOG_UPDATE_INTERVAL(this);
497
497
  ESP_LOGCONFIG(TAG, " Child components (%d):", this->children_.size());
498
498
  for (auto *child : this->children_) {
499
499
  ESP_LOGCONFIG(TAG, " - %s", child->describe().c_str());
@@ -59,7 +59,7 @@ from esphome.const import (
59
59
  DEVICE_CLASS_VIBRATION,
60
60
  DEVICE_CLASS_WINDOW,
61
61
  )
62
- from esphome.core import CORE, coroutine_with_priority
62
+ from esphome.core import CORE, CoroPriority, coroutine_with_priority
63
63
  from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
64
64
  from esphome.cpp_generator import MockObjClass
65
65
  from esphome.util import Registry
@@ -652,7 +652,7 @@ async def binary_sensor_is_off_to_code(config, condition_id, template_arg, args)
652
652
  return cg.new_Pvariable(condition_id, template_arg, paren, False)
653
653
 
654
654
 
655
- @coroutine_with_priority(100.0)
655
+ @coroutine_with_priority(CoroPriority.CORE)
656
656
  async def to_code(config):
657
657
  cg.add_global(binary_sensor_ns.using)
658
658
 
@@ -7,6 +7,19 @@ namespace binary_sensor {
7
7
 
8
8
  static const char *const TAG = "binary_sensor";
9
9
 
10
+ // Function implementation of LOG_BINARY_SENSOR macro to reduce code size
11
+ void log_binary_sensor(const char *tag, const char *prefix, const char *type, BinarySensor *obj) {
12
+ if (obj == nullptr) {
13
+ return;
14
+ }
15
+
16
+ ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str());
17
+
18
+ if (!obj->get_device_class_ref().empty()) {
19
+ ESP_LOGCONFIG(tag, "%s Device Class: '%s'", prefix, obj->get_device_class_ref().c_str());
20
+ }
21
+ }
22
+
10
23
  void BinarySensor::publish_state(bool new_state) {
11
24
  if (this->filter_list_ == nullptr) {
12
25
  this->send_state_internal(new_state);
@@ -10,13 +10,10 @@ namespace esphome {
10
10
 
11
11
  namespace binary_sensor {
12
12
 
13
- #define LOG_BINARY_SENSOR(prefix, type, obj) \
14
- if ((obj) != nullptr) { \
15
- ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
16
- if (!(obj)->get_device_class().empty()) { \
17
- ESP_LOGCONFIG(TAG, "%s Device Class: '%s'", prefix, (obj)->get_device_class().c_str()); \
18
- } \
19
- }
13
+ class BinarySensor;
14
+ void log_binary_sensor(const char *tag, const char *prefix, const char *type, BinarySensor *obj);
15
+
16
+ #define LOG_BINARY_SENSOR(prefix, type, obj) log_binary_sensor(TAG, prefix, LOG_STR_LITERAL(type), obj)
20
17
 
21
18
  #define SUB_BINARY_SENSOR(name) \
22
19
  protected: \
@@ -1 +1,6 @@
1
- CODEOWNERS = ["@tobias-"]
1
+ import esphome.codegen as cg
2
+
3
+ CODEOWNERS = ["@tobias-", "@dan-s-github"]
4
+
5
+ CONF_BL0940_ID = "bl0940_id"
6
+ bl0940_ns = cg.esphome_ns.namespace("bl0940")