esphome 2025.7.5__py3-none-any.whl → 2025.8.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 (756) hide show
  1. esphome/__main__.py +190 -83
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +102 -52
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +475 -116
  73. esphome/components/atm90e32/atm90e32.h +43 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +392 -81
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +203 -60
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +41 -2
  149. esphome/components/esp32_ble/ble.cpp +14 -10
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +139 -73
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/fs3000/fs3000.cpp +0 -2
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  210. esphome/components/ft63x6/ft63x6.cpp +0 -1
  211. esphome/components/gdk101/gdk101.cpp +0 -1
  212. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  213. esphome/components/gl_r01_i2c/sensor.py +1 -1
  214. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  215. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  216. esphome/components/gpio_expander/cached_gpio.h +24 -15
  217. esphome/components/gps/__init__.py +6 -2
  218. esphome/components/gps/gps.cpp +50 -49
  219. esphome/components/gps/gps.h +4 -8
  220. esphome/components/gps/time/gps_time.cpp +3 -9
  221. esphome/components/gps/time/gps_time.h +4 -7
  222. esphome/components/graph/__init__.py +1 -1
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  225. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  227. esphome/components/haier/climate.py +5 -10
  228. esphome/components/haier/haier_base.cpp +0 -1
  229. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  230. esphome/components/hdc1080/hdc1080.cpp +0 -2
  231. esphome/components/heatpumpir/climate.py +2 -2
  232. esphome/components/hlw8012/hlw8012.cpp +0 -1
  233. esphome/components/hm3301/hm3301.cpp +0 -1
  234. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  235. esphome/components/homeassistant/__init__.py +1 -0
  236. esphome/components/homeassistant/number/__init__.py +1 -0
  237. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  238. esphome/components/homeassistant/switch/__init__.py +1 -0
  239. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  240. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  241. esphome/components/host/__init__.py +2 -0
  242. esphome/components/hte501/hte501.cpp +0 -1
  243. esphome/components/http_request/__init__.py +2 -3
  244. esphome/components/http_request/http_request_idf.cpp +2 -2
  245. esphome/components/htu21d/htu21d.cpp +0 -2
  246. esphome/components/htu31d/htu31d.cpp +0 -2
  247. esphome/components/hx711/hx711.cpp +0 -1
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  249. esphome/components/hydreon_rgxx/sensor.py +4 -5
  250. esphome/components/i2c/i2c_bus.h +1 -1
  251. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  253. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  254. esphome/components/i2s_audio/__init__.py +6 -5
  255. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  257. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  262. esphome/components/ili9xxx/display.py +4 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  264. esphome/components/image/__init__.py +123 -92
  265. esphome/components/improv_serial/__init__.py +7 -8
  266. esphome/components/ina219/ina219.cpp +0 -1
  267. esphome/components/ina226/ina226.cpp +0 -2
  268. esphome/components/ina260/ina260.cpp +0 -2
  269. esphome/components/ina2xx_base/__init__.py +2 -5
  270. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  271. esphome/components/ina3221/ina3221.cpp +0 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  273. esphome/components/interval/interval.h +5 -9
  274. esphome/components/json/__init__.py +1 -1
  275. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  276. esphome/components/lc709203f/lc709203f.cpp +0 -2
  277. esphome/components/lcd_gpio/display.py +1 -3
  278. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  279. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  280. esphome/components/ld2410/__init__.py +4 -6
  281. esphome/components/ld2410/binary_sensor.py +4 -0
  282. esphome/components/ld2410/ld2410.cpp +56 -100
  283. esphome/components/ld2410/ld2410.h +17 -15
  284. esphome/components/ld2410/sensor.py +24 -10
  285. esphome/components/ld2412/__init__.py +46 -0
  286. esphome/components/ld2412/binary_sensor.py +70 -0
  287. esphome/components/ld2412/button/__init__.py +74 -0
  288. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  289. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  290. esphome/components/ld2412/button/query_button.cpp +9 -0
  291. esphome/components/ld2412/button/query_button.h +18 -0
  292. esphome/components/ld2412/button/restart_button.cpp +9 -0
  293. esphome/components/ld2412/button/restart_button.h +18 -0
  294. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  296. esphome/components/ld2412/ld2412.cpp +861 -0
  297. esphome/components/ld2412/ld2412.h +141 -0
  298. esphome/components/ld2412/number/__init__.py +126 -0
  299. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  300. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  301. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  302. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  303. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  305. esphome/components/ld2412/select/__init__.py +82 -0
  306. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  307. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  308. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  309. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  310. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  311. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  312. esphome/components/ld2412/sensor.py +124 -0
  313. esphome/components/ld2412/switch/__init__.py +45 -0
  314. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  316. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  318. esphome/components/ld2412/text_sensor.py +34 -0
  319. esphome/components/ld2420/ld2420.cpp +0 -1
  320. esphome/components/ld2450/__init__.py +3 -4
  321. esphome/components/ld2450/binary_sensor.py +3 -0
  322. esphome/components/ld2450/ld2450.cpp +77 -165
  323. esphome/components/ld2450/ld2450.h +26 -54
  324. esphome/components/ld2450/sensor.py +120 -6
  325. esphome/components/ld2450/text_sensor.py +5 -4
  326. esphome/components/ld24xx/__init__.py +1 -0
  327. esphome/components/ld24xx/ld24xx.h +65 -0
  328. esphome/components/ledc/ledc_output.cpp +0 -1
  329. esphome/components/libretiny/__init__.py +2 -0
  330. esphome/components/light/__init__.py +0 -1
  331. esphome/components/light/effects.py +70 -45
  332. esphome/components/light/light_call.cpp +101 -66
  333. esphome/components/light/light_color_values.h +16 -11
  334. esphome/components/light/light_json_schema.cpp +46 -44
  335. esphome/components/light/light_state.cpp +8 -11
  336. esphome/components/light/light_traits.h +17 -0
  337. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  338. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  339. esphome/components/lock/__init__.py +0 -1
  340. esphome/components/logger/__init__.py +31 -9
  341. esphome/components/logger/logger.cpp +12 -7
  342. esphome/components/logger/logger.h +25 -14
  343. esphome/components/logger/logger_esp32.cpp +2 -7
  344. esphome/components/logger/logger_esp8266.cpp +2 -4
  345. esphome/components/logger/logger_host.cpp +2 -4
  346. esphome/components/logger/logger_libretiny.cpp +2 -4
  347. esphome/components/logger/logger_rp2040.cpp +2 -4
  348. esphome/components/logger/logger_zephyr.cpp +86 -0
  349. esphome/components/logger/select/logger_level_select.cpp +2 -4
  350. esphome/components/logger/select/logger_level_select.h +2 -4
  351. esphome/components/logger/task_log_buffer.cpp +2 -4
  352. esphome/components/logger/task_log_buffer.h +2 -4
  353. esphome/components/lps22/sensor.py +5 -5
  354. esphome/components/ltr390/ltr390.cpp +0 -2
  355. esphome/components/ltr501/ltr501.cpp +0 -1
  356. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  357. esphome/components/lvgl/__init__.py +14 -13
  358. esphome/components/lvgl/automation.py +2 -4
  359. esphome/components/lvgl/defines.py +0 -2
  360. esphome/components/lvgl/helpers.py +1 -1
  361. esphome/components/lvgl/lv_validation.py +7 -4
  362. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  363. esphome/components/lvgl/styles.py +2 -2
  364. esphome/components/lvgl/types.py +1 -1
  365. esphome/components/lvgl/widgets/__init__.py +2 -2
  366. esphome/components/lvgl/widgets/arc.py +14 -11
  367. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  368. esphome/components/lvgl/widgets/qrcode.py +7 -7
  369. esphome/components/lvgl/widgets/spinner.py +6 -6
  370. esphome/components/lvgl/widgets/switch.py +2 -2
  371. esphome/components/lvgl/widgets/tabview.py +3 -3
  372. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  373. esphome/components/matrix_keypad/__init__.py +4 -3
  374. esphome/components/max17043/max17043.cpp +0 -2
  375. esphome/components/max31855/max31855.cpp +1 -4
  376. esphome/components/max31856/max31856.cpp +0 -4
  377. esphome/components/max31865/max31865.cpp +0 -1
  378. esphome/components/max44009/max44009.cpp +0 -1
  379. esphome/components/max6675/max6675.cpp +1 -4
  380. esphome/components/max6956/max6956.cpp +0 -1
  381. esphome/components/max7219/max7219.cpp +0 -1
  382. esphome/components/max7219digit/display.py +1 -1
  383. esphome/components/max7219digit/max7219digit.cpp +0 -1
  384. esphome/components/max9611/max9611.cpp +0 -1
  385. esphome/components/mcp23008/__init__.py +1 -1
  386. esphome/components/mcp23008/mcp23008.cpp +0 -1
  387. esphome/components/mcp23016/mcp23016.cpp +0 -1
  388. esphome/components/mcp23017/__init__.py +1 -1
  389. esphome/components/mcp23017/mcp23017.cpp +0 -1
  390. esphome/components/mcp23s08/__init__.py +1 -1
  391. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  392. esphome/components/mcp23s17/__init__.py +1 -1
  393. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  394. esphome/components/mcp23x08_base/__init__.py +2 -0
  395. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  396. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  397. esphome/components/mcp23x17_base/__init__.py +2 -0
  398. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  399. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  400. esphome/components/mcp23xxx_base/__init__.py +11 -5
  401. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  402. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  403. esphome/components/mcp3008/mcp3008.cpp +1 -4
  404. esphome/components/mcp3204/mcp3204.cpp +1 -4
  405. esphome/components/mcp4461/mcp4461.cpp +0 -1
  406. esphome/components/mcp4725/mcp4725.cpp +0 -1
  407. esphome/components/mcp4728/mcp4728.cpp +0 -1
  408. esphome/components/mcp9600/mcp9600.cpp +0 -2
  409. esphome/components/mcp9808/mcp9808.cpp +0 -2
  410. esphome/components/mdns/__init__.py +3 -0
  411. esphome/components/mdns/mdns_component.cpp +2 -0
  412. esphome/components/mdns/mdns_component.h +4 -0
  413. esphome/components/media_player/__init__.py +40 -0
  414. esphome/components/media_player/automation.h +16 -0
  415. esphome/components/media_player/media_player.cpp +13 -0
  416. esphome/components/media_player/media_player.h +50 -3
  417. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  418. esphome/components/mics_4514/mics_4514.cpp +1 -6
  419. esphome/components/midea/ir_transmitter.h +4 -4
  420. esphome/components/mipi/__init__.py +416 -0
  421. esphome/components/mipi_dsi/__init__.py +5 -0
  422. esphome/components/mipi_dsi/display.py +233 -0
  423. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  424. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  425. esphome/components/mipi_dsi/models/__init__.py +0 -0
  426. esphome/components/mipi_dsi/models/guition.py +38 -0
  427. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  428. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  429. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  430. esphome/components/mipi_spi/__init__.py +0 -9
  431. esphome/components/mipi_spi/display.py +220 -256
  432. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  433. esphome/components/mipi_spi/mipi_spi.h +556 -108
  434. esphome/components/mipi_spi/models/__init__.py +0 -65
  435. esphome/components/mipi_spi/models/adafruit.py +30 -0
  436. esphome/components/mipi_spi/models/amoled.py +41 -5
  437. esphome/components/mipi_spi/models/ili.py +5 -5
  438. esphome/components/mipi_spi/models/jc.py +1 -3
  439. esphome/components/mipi_spi/models/lilygo.py +1 -1
  440. esphome/components/mipi_spi/models/waveshare.py +16 -1
  441. esphome/components/mixer/speaker/__init__.py +4 -5
  442. esphome/components/mlx90393/sensor.py +7 -5
  443. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  444. esphome/components/mlx90614/mlx90614.cpp +0 -1
  445. esphome/components/mmc5603/mmc5603.cpp +0 -1
  446. esphome/components/mmc5983/mmc5983.cpp +0 -2
  447. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  448. esphome/components/mpr121/__init__.py +7 -6
  449. esphome/components/mpr121/mpr121.cpp +0 -1
  450. esphome/components/mpu6050/mpu6050.cpp +0 -1
  451. esphome/components/mpu6886/mpu6886.cpp +0 -1
  452. esphome/components/mqtt/__init__.py +1 -2
  453. esphome/components/mqtt/mqtt_button.cpp +1 -1
  454. esphome/components/mqtt/mqtt_client.cpp +0 -1
  455. esphome/components/mqtt/mqtt_component.cpp +8 -14
  456. esphome/components/mqtt/mqtt_component.h +0 -7
  457. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  458. esphome/components/mqtt/mqtt_sensor.h +0 -1
  459. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  461. esphome/components/ms5611/ms5611.cpp +0 -1
  462. esphome/components/ms8607/ms8607.cpp +0 -1
  463. esphome/components/msa3xx/msa3xx.cpp +0 -2
  464. esphome/components/my9231/my9231.cpp +0 -2
  465. esphome/components/nau7802/nau7802.cpp +0 -1
  466. esphome/components/neopixelbus/light.py +3 -0
  467. esphome/components/network/util.cpp +29 -0
  468. esphome/components/nextion/nextion.cpp +2 -2
  469. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  470. esphome/components/npi19/npi19.cpp +0 -2
  471. esphome/components/nrf52/__init__.py +223 -0
  472. esphome/components/nrf52/boards.py +34 -0
  473. esphome/components/nrf52/const.py +18 -0
  474. esphome/components/nrf52/gpio.py +79 -0
  475. esphome/components/number/__init__.py +2 -1
  476. esphome/components/one_wire/__init__.py +1 -2
  477. esphome/components/one_wire/one_wire.cpp +0 -2
  478. esphome/components/one_wire/one_wire.h +0 -2
  479. esphome/components/opentherm/hub.cpp +0 -1
  480. esphome/components/opentherm/number/__init__.py +2 -2
  481. esphome/components/openthread/__init__.py +2 -3
  482. esphome/components/openthread/openthread.cpp +30 -13
  483. esphome/components/openthread/openthread.h +3 -0
  484. esphome/components/openthread/openthread_esp.cpp +3 -1
  485. esphome/components/opt3001/sensor.py +2 -6
  486. esphome/components/output/__init__.py +38 -0
  487. esphome/components/output/automation.h +24 -0
  488. esphome/components/output/switch/output_switch.cpp +0 -2
  489. esphome/components/packages/__init__.py +1 -2
  490. esphome/components/packet_transport/__init__.py +4 -3
  491. esphome/components/pca6416a/pca6416a.cpp +0 -1
  492. esphome/components/pca9554/pca9554.cpp +0 -1
  493. esphome/components/pca9685/pca9685_output.cpp +0 -2
  494. esphome/components/pcf85063/pcf85063.cpp +0 -1
  495. esphome/components/pcf8563/pcf8563.cpp +0 -1
  496. esphome/components/pcf8574/pcf8574.cpp +0 -1
  497. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  498. esphome/components/pipsolar/pipsolar.cpp +54 -42
  499. esphome/components/pipsolar/pipsolar.h +5 -4
  500. esphome/components/pipsolar/sensor/__init__.py +1 -1
  501. esphome/components/pm2005/pm2005.cpp +0 -1
  502. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  503. esphome/components/pmwcs3/sensor.py +1 -2
  504. esphome/components/pn532/pn532.cpp +0 -2
  505. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  506. esphome/components/power_supply/power_supply.cpp +7 -10
  507. esphome/components/power_supply/power_supply.h +1 -1
  508. esphome/components/psram/__init__.py +6 -1
  509. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  510. esphome/components/pulse_counter/sensor.py +9 -6
  511. esphome/components/pylontech/pylontech.cpp +0 -1
  512. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  513. esphome/components/qmp6988/qmp6988.cpp +0 -2
  514. esphome/components/qspi_dbi/display.py +2 -3
  515. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  516. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  517. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  518. esphome/components/rc522/rc522.cpp +9 -31
  519. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  520. esphome/components/remote_base/__init__.py +5 -6
  521. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  522. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  523. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  524. esphome/components/remote_transmitter/__init__.py +26 -0
  525. esphome/components/remote_transmitter/automation.h +18 -0
  526. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  527. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  528. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  529. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  530. esphome/components/resampler/speaker/__init__.py +4 -5
  531. esphome/components/rf_bridge/__init__.py +4 -8
  532. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  533. esphome/components/rp2040/__init__.py +3 -1
  534. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  535. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  536. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  537. esphome/components/rpi_dpi_rgb/display.py +13 -15
  538. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  539. esphome/components/runtime_stats/__init__.py +34 -0
  540. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  541. esphome/components/runtime_stats/runtime_stats.h +132 -0
  542. esphome/components/scd30/scd30.cpp +0 -2
  543. esphome/components/scd30/sensor.py +1 -2
  544. esphome/components/scd4x/scd4x.cpp +0 -1
  545. esphome/components/scd4x/sensor.py +1 -3
  546. esphome/components/sdl/display.py +3 -1
  547. esphome/components/sdl/sdl_esphome.cpp +0 -2
  548. esphome/components/sdp3x/sdp3x.cpp +0 -2
  549. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  550. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  551. esphome/components/select/__init__.py +2 -3
  552. esphome/components/select/select_traits.cpp +1 -1
  553. esphome/components/select/select_traits.h +1 -1
  554. esphome/components/sen0321/sen0321.cpp +0 -1
  555. esphome/components/sen5x/sen5x.cpp +0 -2
  556. esphome/components/senseair/senseair.cpp +7 -3
  557. esphome/components/senseair/senseair.h +11 -0
  558. esphome/components/sensor/__init__.py +36 -4
  559. esphome/components/sensor/filter.cpp +49 -10
  560. esphome/components/sensor/filter.h +22 -7
  561. esphome/components/sensor/sensor.cpp +0 -1
  562. esphome/components/sensor/sensor.h +0 -9
  563. esphome/components/sfa30/sfa30.cpp +0 -4
  564. esphome/components/sgp30/sgp30.cpp +0 -2
  565. esphome/components/sgp4x/sensor.py +1 -1
  566. esphome/components/sgp4x/sgp4x.cpp +0 -2
  567. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  568. esphome/components/sht3xd/sht3xd.cpp +0 -2
  569. esphome/components/sht4x/sht4x.cpp +0 -2
  570. esphome/components/shtcx/shtcx.cpp +0 -1
  571. esphome/components/sim800l/__init__.py +2 -4
  572. esphome/components/sm16716/sm16716.cpp +0 -1
  573. esphome/components/sm2135/sm2135.cpp +0 -1
  574. esphome/components/sm2235/sm2235.cpp +0 -1
  575. esphome/components/sm2335/sm2335.cpp +0 -1
  576. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  577. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  578. esphome/components/sntp/sntp_component.cpp +0 -1
  579. esphome/components/sound_level/sensor.py +1 -1
  580. esphome/components/speaker/media_player/__init__.py +21 -33
  581. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  582. esphome/components/spi/__init__.py +29 -13
  583. esphome/components/spi/spi.cpp +0 -2
  584. esphome/components/spi_device/spi_device.cpp +1 -4
  585. esphome/components/sprinkler/__init__.py +4 -4
  586. esphome/components/sps30/sps30.cpp +0 -1
  587. esphome/components/ssd1306_base/__init__.py +11 -11
  588. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  589. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  590. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  591. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  592. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  593. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  594. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  595. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  596. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  597. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  598. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  599. esphome/components/st7701s/display.py +10 -14
  600. esphome/components/st7701s/st7701s.cpp +0 -3
  601. esphome/components/st7735/st7735.cpp +0 -1
  602. esphome/components/st7789v/st7789v.cpp +0 -1
  603. esphome/components/st7920/st7920.cpp +0 -1
  604. esphome/components/status_led/light/status_led_light.cpp +0 -2
  605. esphome/components/status_led/status_led.cpp +0 -1
  606. esphome/components/stepper/__init__.py +2 -4
  607. esphome/components/sts3x/sts3x.cpp +0 -1
  608. esphome/components/substitutions/__init__.py +10 -16
  609. esphome/components/substitutions/jinja.py +24 -1
  610. esphome/components/sun/__init__.py +2 -3
  611. esphome/components/switch/__init__.py +31 -1
  612. esphome/components/switch/automation.h +24 -0
  613. esphome/components/switch/switch.cpp +8 -0
  614. esphome/components/switch/switch.h +8 -0
  615. esphome/components/sx126x/sx126x.cpp +0 -2
  616. esphome/components/sx127x/sx127x.cpp +0 -2
  617. esphome/components/sx1509/__init__.py +7 -5
  618. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  619. esphome/components/sx1509/sx1509.cpp +0 -2
  620. esphome/components/syslog/esphome_syslog.cpp +1 -1
  621. esphome/components/tc74/tc74.cpp +0 -1
  622. esphome/components/tca9548a/tca9548a.cpp +0 -1
  623. esphome/components/tca9555/tca9555.cpp +0 -1
  624. esphome/components/tcs34725/tcs34725.cpp +0 -1
  625. esphome/components/tee501/tee501.cpp +0 -1
  626. esphome/components/tem3200/tem3200.cpp +0 -2
  627. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  628. esphome/components/template/cover/template_cover.cpp +0 -1
  629. esphome/components/template/select/template_select.cpp +0 -1
  630. esphome/components/template/text/template_text.cpp +0 -2
  631. esphome/components/template/valve/template_valve.cpp +0 -1
  632. esphome/components/text/__init__.py +0 -1
  633. esphome/components/text/text_traits.h +2 -0
  634. esphome/components/text_sensor/__init__.py +2 -1
  635. esphome/components/text_sensor/text_sensor.cpp +0 -2
  636. esphome/components/text_sensor/text_sensor.h +0 -8
  637. esphome/components/thermostat/climate.py +4 -4
  638. esphome/components/time/__init__.py +7 -4
  639. esphome/components/time/real_time_clock.cpp +16 -3
  640. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  641. esphome/components/tlc5947/tlc5947.cpp +0 -2
  642. esphome/components/tlc5971/tlc5971.cpp +0 -2
  643. esphome/components/tm1621/tm1621.cpp +0 -2
  644. esphome/components/tm1637/tm1637.cpp +0 -2
  645. esphome/components/tm1638/tm1638.cpp +0 -2
  646. esphome/components/tm1651/__init__.py +45 -48
  647. esphome/components/tm1651/tm1651.cpp +213 -47
  648. esphome/components/tm1651/tm1651.h +37 -32
  649. esphome/components/tmp117/tmp117.cpp +0 -2
  650. esphome/components/tsl2561/tsl2561.cpp +0 -1
  651. esphome/components/tsl2591/tsl2591.cpp +0 -1
  652. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  653. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  654. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  655. esphome/components/tuya/climate/__init__.py +9 -10
  656. esphome/components/tuya/number/__init__.py +8 -6
  657. esphome/components/tx20/tx20.cpp +0 -1
  658. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  659. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  660. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  661. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  662. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  663. esphome/components/udp/__init__.py +1 -1
  664. esphome/components/ufire_ec/sensor.py +1 -2
  665. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  666. esphome/components/ufire_ise/sensor.py +1 -2
  667. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  668. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  669. esphome/components/update/__init__.py +0 -1
  670. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  671. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  672. esphome/components/usb_host/usb_host_client.cpp +0 -1
  673. esphome/components/usb_host/usb_host_component.cpp +0 -1
  674. esphome/components/valve/__init__.py +0 -1
  675. esphome/components/veml3235/veml3235.cpp +0 -3
  676. esphome/components/veml7700/veml7700.cpp +0 -2
  677. esphome/components/version/version_text_sensor.cpp +0 -1
  678. esphome/components/version/version_text_sensor.h +0 -1
  679. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  680. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  681. esphome/components/web_server/__init__.py +13 -0
  682. esphome/components/web_server/web_server.cpp +188 -353
  683. esphome/components/web_server/web_server.h +61 -1
  684. esphome/components/web_server_base/__init__.py +1 -1
  685. esphome/components/web_server_base/web_server_base.cpp +2 -0
  686. esphome/components/web_server_base/web_server_base.h +6 -0
  687. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  688. esphome/components/web_server_idf/web_server_idf.h +2 -0
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  690. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  691. esphome/components/wifi/__init__.py +17 -43
  692. esphome/components/wifi/wifi_component.cpp +100 -36
  693. esphome/components/wifi/wifi_component.h +5 -1
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  695. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  696. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  697. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  698. esphome/components/wireguard/wireguard.cpp +0 -2
  699. esphome/components/x9c/x9c.cpp +0 -2
  700. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  701. esphome/components/xl9535/xl9535.cpp +0 -2
  702. esphome/components/zephyr/__init__.py +252 -0
  703. esphome/components/zephyr/const.py +16 -0
  704. esphome/components/zephyr/core.cpp +90 -0
  705. esphome/components/zephyr/gpio.cpp +120 -0
  706. esphome/components/zephyr/gpio.h +38 -0
  707. esphome/components/zephyr/pre_build.py.script +4 -0
  708. esphome/components/zephyr/preferences.cpp +156 -0
  709. esphome/components/zephyr/preferences.h +13 -0
  710. esphome/config.py +38 -16
  711. esphome/config_helpers.py +1 -2
  712. esphome/config_validation.py +12 -16
  713. esphome/const.py +26 -1
  714. esphome/core/__init__.py +92 -51
  715. esphome/core/application.cpp +75 -21
  716. esphome/core/application.h +106 -171
  717. esphome/core/color.h +10 -0
  718. esphome/core/component.cpp +41 -25
  719. esphome/core/component.h +9 -6
  720. esphome/core/component_iterator.cpp +61 -261
  721. esphome/core/component_iterator.h +15 -0
  722. esphome/core/config.py +26 -11
  723. esphome/core/defines.h +40 -2
  724. esphome/core/entity_base.h +18 -0
  725. esphome/core/entity_helpers.py +45 -10
  726. esphome/core/helpers.cpp +8 -15
  727. esphome/core/helpers.h +60 -6
  728. esphome/core/lock_free_queue.h +1 -1
  729. esphome/core/scheduler.cpp +311 -77
  730. esphome/core/scheduler.h +141 -28
  731. esphome/cpp_generator.py +2 -6
  732. esphome/cpp_helpers.py +1 -1
  733. esphome/dashboard/dashboard.py +2 -3
  734. esphome/dashboard/dns.py +2 -8
  735. esphome/dashboard/web_server.py +34 -19
  736. esphome/espota2.py +1 -4
  737. esphome/git.py +3 -1
  738. esphome/helpers.py +23 -4
  739. esphome/log.py +3 -1
  740. esphome/mqtt.py +3 -5
  741. esphome/platformio_api.py +7 -4
  742. esphome/types.py +12 -0
  743. esphome/util.py +20 -8
  744. esphome/voluptuous_schema.py +4 -3
  745. esphome/vscode.py +1 -2
  746. esphome/wizard.py +1 -4
  747. esphome/writer.py +16 -108
  748. esphome/yaml_util.py +7 -5
  749. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/METADATA +13 -14
  750. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/RECORD +755 -675
  751. esphome/components/mipi_spi/models/commands.py +0 -82
  752. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  753. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/WHEEL +0 -0
  754. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/entry_points.txt +0 -0
  755. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/licenses/LICENSE +0 -0
  756. {esphome-2025.7.5.dist-info → esphome-2025.8.0.dist-info}/top_level.txt +0 -0
@@ -186,8 +186,7 @@ def _process_package(package_config, config):
186
186
  package_config = _process_base_package(package_config)
187
187
  if isinstance(package_config, dict):
188
188
  recursive_package = do_packages_pass(package_config)
189
- config = merge_config(recursive_package, config)
190
- return config
189
+ return merge_config(recursive_package, config)
191
190
 
192
191
 
193
192
  def do_packages_pass(config: dict):
@@ -89,9 +89,10 @@ def validate_(config):
89
89
  raise cv.Invalid("No sensors or binary sensors to encrypt")
90
90
  elif config[CONF_ROLLING_CODE_ENABLE]:
91
91
  raise cv.Invalid("Rolling code requires an encryption key")
92
- if config[CONF_PING_PONG_ENABLE]:
93
- if not any(CONF_ENCRYPTION in p for p in config.get(CONF_PROVIDERS) or ()):
94
- raise cv.Invalid("Ping-pong requires at least one encrypted provider")
92
+ if config[CONF_PING_PONG_ENABLE] and not any(
93
+ CONF_ENCRYPTION in p for p in config.get(CONF_PROVIDERS) or ()
94
+ ):
95
+ raise cv.Invalid("Ping-pong requires at least one encrypted provider")
95
96
  return config
96
97
 
97
98
 
@@ -24,7 +24,6 @@ enum PCA6416AGPIORegisters {
24
24
  static const char *const TAG = "pca6416a";
25
25
 
26
26
  void PCA6416AComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  // Test to see if device exists
29
28
  uint8_t value;
30
29
  if (!this->read_register_(PCA6416A_INPUT0, &value)) {
@@ -13,7 +13,6 @@ const uint8_t CONFIG_REG = 3;
13
13
  static const char *const TAG = "pca9554";
14
14
 
15
15
  void PCA9554Component::setup() {
16
- ESP_LOGCONFIG(TAG, "Running setup");
17
16
  this->reg_width_ = (this->pin_count_ + 7) / 8;
18
17
  // Test to see if device exists
19
18
  if (!this->read_inputs_()) {
@@ -26,8 +26,6 @@ static const uint8_t PCA9685_MODE1_AUTOINC = 0b00100000;
26
26
  static const uint8_t PCA9685_MODE1_SLEEP = 0b00010000;
27
27
 
28
28
  void PCA9685Output::setup() {
29
- ESP_LOGCONFIG(TAG, "Running setup");
30
-
31
29
  ESP_LOGV(TAG, " Resetting devices");
32
30
  if (!this->write_bytes(PCA9685_REGISTER_SOFTWARE_RESET, nullptr, 0)) {
33
31
  this->mark_failed();
@@ -10,7 +10,6 @@ namespace pcf85063 {
10
10
  static const char *const TAG = "pcf85063";
11
11
 
12
12
  void PCF85063Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Running setup");
14
13
  if (!this->read_rtc_()) {
15
14
  this->mark_failed();
16
15
  }
@@ -10,7 +10,6 @@ namespace pcf8563 {
10
10
  static const char *const TAG = "PCF8563";
11
11
 
12
12
  void PCF8563Component::setup() {
13
- ESP_LOGCONFIG(TAG, "Running setup");
14
13
  if (!this->read_rtc_()) {
15
14
  this->mark_failed();
16
15
  }
@@ -7,7 +7,6 @@ namespace pcf8574 {
7
7
  static const char *const TAG = "pcf8574";
8
8
 
9
9
  void PCF8574Component::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
10
  if (!this->read_gpio_()) {
12
11
  ESP_LOGE(TAG, "PCF8574 not available under 0x%02X", this->address_);
13
12
  this->mark_failed();
@@ -18,7 +18,6 @@ static const uint8_t PI4IOE5V6408_REGISTER_INTERRUPT_STATUS = 0x13;
18
18
  static const char *const TAG = "pi4ioe5v6408";
19
19
 
20
20
  void PI4IOE5V6408Component::setup() {
21
- ESP_LOGCONFIG(TAG, "Running setup");
22
21
  if (this->reset_) {
23
22
  this->reg(PI4IOE5V6408_REGISTER_DEVICE_ID) |= 0b00000001;
24
23
  this->reg(PI4IOE5V6408_REGISTER_OUT_HIGH_IMPEDENCE) = 0b00000000;
@@ -23,20 +23,18 @@ void Pipsolar::loop() {
23
23
  // Read message
24
24
  if (this->state_ == STATE_IDLE) {
25
25
  this->empty_uart_buffer_();
26
- switch (this->send_next_command_()) {
27
- case 0:
28
- // no command send (empty queue) time to poll
29
- if (millis() - this->last_poll_ > this->update_interval_) {
30
- this->send_next_poll_();
31
- this->last_poll_ = millis();
32
- }
33
- return;
34
- break;
35
- case 1:
36
- // command send
37
- return;
38
- break;
26
+
27
+ if (this->send_next_command_()) {
28
+ // command sent
29
+ return;
30
+ }
31
+
32
+ if (this->send_next_poll_()) {
33
+ // poll sent
34
+ return;
39
35
  }
36
+
37
+ return;
40
38
  }
41
39
  if (this->state_ == STATE_COMMAND_COMPLETE) {
42
40
  if (this->check_incoming_length_(4)) {
@@ -530,7 +528,7 @@ void Pipsolar::loop() {
530
528
  // '(00000000000000000000000000000000'
531
529
  // iterate over all available flag (as not all models have all flags, but at least in the same order)
532
530
  this->value_warnings_present_ = false;
533
- this->value_faults_present_ = true;
531
+ this->value_faults_present_ = false;
534
532
 
535
533
  for (size_t i = 1; i < strlen(tmp); i++) {
536
534
  enabled = tmp[i] == '1';
@@ -708,6 +706,7 @@ void Pipsolar::loop() {
708
706
  return;
709
707
  }
710
708
  // crc ok
709
+ this->used_polling_commands_[this->last_polling_command_].needs_update = false;
711
710
  this->state_ = STATE_POLL_CHECKED;
712
711
  return;
713
712
  } else {
@@ -788,7 +787,7 @@ uint8_t Pipsolar::check_incoming_crc_() {
788
787
  }
789
788
 
790
789
  // send next command used
791
- uint8_t Pipsolar::send_next_command_() {
790
+ bool Pipsolar::send_next_command_() {
792
791
  uint16_t crc16;
793
792
  if (!this->command_queue_[this->command_queue_position_].empty()) {
794
793
  const char *command = this->command_queue_[this->command_queue_position_].c_str();
@@ -809,37 +808,43 @@ uint8_t Pipsolar::send_next_command_() {
809
808
  // end Byte
810
809
  this->write(0x0D);
811
810
  ESP_LOGD(TAG, "Sending command from queue: %s with length %d", command, length);
812
- return 1;
811
+ return true;
813
812
  }
814
- return 0;
813
+ return false;
815
814
  }
816
815
 
817
- void Pipsolar::send_next_poll_() {
816
+ bool Pipsolar::send_next_poll_() {
818
817
  uint16_t crc16;
819
- this->last_polling_command_ = (this->last_polling_command_ + 1) % 15;
820
- if (this->used_polling_commands_[this->last_polling_command_].length == 0) {
821
- this->last_polling_command_ = 0;
822
- }
823
- if (this->used_polling_commands_[this->last_polling_command_].length == 0) {
824
- // no command specified
825
- return;
818
+
819
+ for (uint8_t i = 0; i < POLLING_COMMANDS_MAX; i++) {
820
+ this->last_polling_command_ = (this->last_polling_command_ + 1) % POLLING_COMMANDS_MAX;
821
+ if (this->used_polling_commands_[this->last_polling_command_].length == 0) {
822
+ // not enabled
823
+ continue;
824
+ }
825
+ if (!this->used_polling_commands_[this->last_polling_command_].needs_update) {
826
+ // no update requested
827
+ continue;
828
+ }
829
+ this->state_ = STATE_POLL;
830
+ this->command_start_millis_ = millis();
831
+ this->empty_uart_buffer_();
832
+ this->read_pos_ = 0;
833
+ crc16 = this->pipsolar_crc_(this->used_polling_commands_[this->last_polling_command_].command,
834
+ this->used_polling_commands_[this->last_polling_command_].length);
835
+ this->write_array(this->used_polling_commands_[this->last_polling_command_].command,
836
+ this->used_polling_commands_[this->last_polling_command_].length);
837
+ // checksum
838
+ this->write(((uint8_t) ((crc16) >> 8))); // highbyte
839
+ this->write(((uint8_t) ((crc16) &0xff))); // lowbyte
840
+ // end Byte
841
+ this->write(0x0D);
842
+ ESP_LOGD(TAG, "Sending polling command : %s with length %d",
843
+ this->used_polling_commands_[this->last_polling_command_].command,
844
+ this->used_polling_commands_[this->last_polling_command_].length);
845
+ return true;
826
846
  }
827
- this->state_ = STATE_POLL;
828
- this->command_start_millis_ = millis();
829
- this->empty_uart_buffer_();
830
- this->read_pos_ = 0;
831
- crc16 = this->pipsolar_crc_(this->used_polling_commands_[this->last_polling_command_].command,
832
- this->used_polling_commands_[this->last_polling_command_].length);
833
- this->write_array(this->used_polling_commands_[this->last_polling_command_].command,
834
- this->used_polling_commands_[this->last_polling_command_].length);
835
- // checksum
836
- this->write(((uint8_t) ((crc16) >> 8))); // highbyte
837
- this->write(((uint8_t) ((crc16) &0xff))); // lowbyte
838
- // end Byte
839
- this->write(0x0D);
840
- ESP_LOGD(TAG, "Sending polling command : %s with length %d",
841
- this->used_polling_commands_[this->last_polling_command_].command,
842
- this->used_polling_commands_[this->last_polling_command_].length);
847
+ return false;
843
848
  }
844
849
 
845
850
  void Pipsolar::queue_command_(const char *command, uint8_t length) {
@@ -869,7 +874,13 @@ void Pipsolar::dump_config() {
869
874
  }
870
875
  }
871
876
  }
872
- void Pipsolar::update() {}
877
+ void Pipsolar::update() {
878
+ for (auto &used_polling_command : this->used_polling_commands_) {
879
+ if (used_polling_command.length != 0) {
880
+ used_polling_command.needs_update = true;
881
+ }
882
+ }
883
+ }
873
884
 
874
885
  void Pipsolar::add_polling_command_(const char *command, ENUMPollingCommand polling_command) {
875
886
  for (auto &used_polling_command : this->used_polling_commands_) {
@@ -891,6 +902,7 @@ void Pipsolar::add_polling_command_(const char *command, ENUMPollingCommand poll
891
902
  used_polling_command.errors = 0;
892
903
  used_polling_command.identifier = polling_command;
893
904
  used_polling_command.length = length - 1;
905
+ used_polling_command.needs_update = true;
894
906
  return;
895
907
  }
896
908
  }
@@ -25,6 +25,7 @@ struct PollingCommand {
25
25
  uint8_t length = 0;
26
26
  uint8_t errors;
27
27
  ENUMPollingCommand identifier;
28
+ bool needs_update;
28
29
  };
29
30
 
30
31
  #define PIPSOLAR_VALUED_ENTITY_(type, name, polling_command, value_type) \
@@ -189,14 +190,14 @@ class Pipsolar : public uart::UARTDevice, public PollingComponent {
189
190
  static const size_t PIPSOLAR_READ_BUFFER_LENGTH = 110; // maximum supported answer length
190
191
  static const size_t COMMAND_QUEUE_LENGTH = 10;
191
192
  static const size_t COMMAND_TIMEOUT = 5000;
192
- uint32_t last_poll_ = 0;
193
+ static const size_t POLLING_COMMANDS_MAX = 15;
193
194
  void add_polling_command_(const char *command, ENUMPollingCommand polling_command);
194
195
  void empty_uart_buffer_();
195
196
  uint8_t check_incoming_crc_();
196
197
  uint8_t check_incoming_length_(uint8_t length);
197
198
  uint16_t pipsolar_crc_(uint8_t *msg, uint8_t len);
198
- uint8_t send_next_command_();
199
- void send_next_poll_();
199
+ bool send_next_command_();
200
+ bool send_next_poll_();
200
201
  void queue_command_(const char *command, uint8_t length);
201
202
  std::string command_queue_[COMMAND_QUEUE_LENGTH];
202
203
  uint8_t command_queue_position_ = 0;
@@ -216,7 +217,7 @@ class Pipsolar : public uart::UARTDevice, public PollingComponent {
216
217
  };
217
218
 
218
219
  uint8_t last_polling_command_ = 0;
219
- PollingCommand used_polling_commands_[15];
220
+ PollingCommand used_polling_commands_[POLLING_COMMANDS_MAX];
220
221
  };
221
222
 
222
223
  } // namespace pipsolar
@@ -273,7 +273,7 @@ CONFIG_SCHEMA = PIPSOLAR_COMPONENT_SCHEMA.extend(
273
273
  async def to_code(config):
274
274
  paren = await cg.get_variable(config[CONF_PIPSOLAR_ID])
275
275
 
276
- for type, _ in TYPES.items():
276
+ for type in TYPES:
277
277
  if type in config:
278
278
  conf = config[type]
279
279
  sens = await sensor.new_sensor(conf)
@@ -39,7 +39,6 @@ static const LogString *pm2005_get_measuring_mode_string(int status) {
39
39
  static inline uint16_t get_sensor_value(const uint8_t *data, uint8_t i) { return data[i] * 0x100 + data[i + 1]; }
40
40
 
41
41
  void PM2005Component::setup() {
42
- ESP_LOGCONFIG(TAG, "Running setup");
43
42
  if (this->sensor_type_ == PM2005) {
44
43
  this->situation_value_index_ = 3;
45
44
  this->pm_1_0_value_index_ = 4;
@@ -19,8 +19,6 @@ static const uint8_t START_CHARACTER_2 = 0x4D;
19
19
  static const uint8_t READ_DATA_RETRY_COUNT = 3;
20
20
 
21
21
  void PMSA003IComponent::setup() {
22
- ESP_LOGCONFIG(TAG, "Running setup");
23
-
24
22
  PM25AQIData data;
25
23
  bool successful_read = this->read_data_(&data);
26
24
 
@@ -114,8 +114,7 @@ PMWCS3_CALIBRATION_SCHEMA = cv.Schema(
114
114
  )
115
115
  async def pmwcs3_calibration_to_code(config, action_id, template_arg, args):
116
116
  parent = await cg.get_variable(config[CONF_ID])
117
- var = cg.new_Pvariable(action_id, template_arg, parent)
118
- return var
117
+ return cg.new_Pvariable(action_id, template_arg, parent)
119
118
 
120
119
 
121
120
  PMWCS3_NEW_I2C_ADDRESS_SCHEMA = cv.maybe_simple_value(
@@ -15,8 +15,6 @@ namespace pn532 {
15
15
  static const char *const TAG = "pn532";
16
16
 
17
17
  void PN532::setup() {
18
- ESP_LOGCONFIG(TAG, "Running setup");
19
-
20
18
  // Get version data
21
19
  if (!this->write_command_({PN532_COMMAND_VERSION_DATA})) {
22
20
  ESP_LOGW(TAG, "Error sending version command, trying again");
@@ -12,12 +12,10 @@ namespace pn532_spi {
12
12
  static const char *const TAG = "pn532_spi";
13
13
 
14
14
  void PN532Spi::setup() {
15
- ESP_LOGI(TAG, "PN532Spi setup started!");
16
15
  this->spi_setup();
17
16
 
18
17
  this->cs_->digital_write(false);
19
18
  delay(10);
20
- ESP_LOGI(TAG, "SPI setup finished!");
21
19
  PN532::setup();
22
20
  }
23
21
 
@@ -7,22 +7,19 @@ namespace power_supply {
7
7
  static const char *const TAG = "power_supply";
8
8
 
9
9
  void PowerSupply::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
-
12
10
  this->pin_->setup();
13
11
  this->pin_->digital_write(false);
14
12
  if (this->enable_on_boot_)
15
13
  this->request_high_power();
16
14
  }
17
15
  void PowerSupply::dump_config() {
18
- ESP_LOGCONFIG(TAG, "Power Supply:");
19
- LOG_PIN(" Pin: ", this->pin_);
20
16
  ESP_LOGCONFIG(TAG,
17
+ "Power Supply:\n"
21
18
  " Time to enable: %" PRIu32 " ms\n"
22
- " Keep on time: %.1f s",
23
- this->enable_time_, this->keep_on_time_ / 1000.0f);
24
- if (this->enable_on_boot_)
25
- ESP_LOGCONFIG(TAG, " Enabled at startup: True");
19
+ " Keep on time: %" PRIu32 " s\n"
20
+ " Enable at startup: %s",
21
+ this->enable_time_, this->keep_on_time_ / 1000u, YESNO(this->enable_on_boot_));
22
+ LOG_PIN(" Pin: ", this->pin_);
26
23
  }
27
24
 
28
25
  float PowerSupply::get_setup_priority() const { return setup_priority::IO; }
@@ -32,7 +29,7 @@ bool PowerSupply::is_enabled() const { return this->active_requests_ != 0; }
32
29
  void PowerSupply::request_high_power() {
33
30
  if (this->active_requests_ == 0) {
34
31
  this->cancel_timeout("power-supply-off");
35
- ESP_LOGD(TAG, "Enabling power supply.");
32
+ ESP_LOGV(TAG, "Enabling");
36
33
  this->pin_->digital_write(true);
37
34
  delay(this->enable_time_);
38
35
  }
@@ -47,7 +44,7 @@ void PowerSupply::unrequest_high_power() {
47
44
  this->active_requests_--;
48
45
  if (this->active_requests_ == 0) {
49
46
  this->set_timeout("power-supply-off", this->keep_on_time_, [this]() {
50
- ESP_LOGD(TAG, "Disabling power supply.");
47
+ ESP_LOGV(TAG, "Disabling");
51
48
  this->pin_->digital_write(false);
52
49
  });
53
50
  }
@@ -36,10 +36,10 @@ class PowerSupply : public Component {
36
36
 
37
37
  protected:
38
38
  GPIOPin *pin_;
39
- bool enable_on_boot_{false};
40
39
  uint32_t enable_time_;
41
40
  uint32_t keep_on_time_;
42
41
  int16_t active_requests_{0}; // use signed integer to make catching negative requests easier.
42
+ bool enable_on_boot_{false};
43
43
  };
44
44
 
45
45
  class PowerSupplyRequester {
@@ -16,6 +16,7 @@ from esphome.components.esp32.const import (
16
16
  import esphome.config_validation as cv
17
17
  from esphome.const import (
18
18
  CONF_ADVANCED,
19
+ CONF_DISABLED,
19
20
  CONF_FRAMEWORK,
20
21
  CONF_ID,
21
22
  CONF_MODE,
@@ -28,12 +29,13 @@ from esphome.core import CORE
28
29
  import esphome.final_validate as fv
29
30
 
30
31
  CODEOWNERS = ["@esphome/core"]
32
+ DOMAIN = "psram"
31
33
 
32
34
  DEPENDENCIES = [PLATFORM_ESP32]
33
35
 
34
36
  _LOGGER = logging.getLogger(__name__)
35
37
 
36
- psram_ns = cg.esphome_ns.namespace("psram")
38
+ psram_ns = cg.esphome_ns.namespace(DOMAIN)
37
39
  PsramComponent = psram_ns.class_("PsramComponent", cg.Component)
38
40
 
39
41
  TYPE_QUAD = "quad"
@@ -101,6 +103,7 @@ def get_config_schema(config):
101
103
  cv.Optional(CONF_MODE, default=modes[0]): cv.one_of(*modes, lower=True),
102
104
  cv.Optional(CONF_ENABLE_ECC, default=False): cv.boolean,
103
105
  cv.Optional(CONF_SPEED, default=speeds[0]): cv.one_of(*speeds, upper=True),
106
+ cv.Optional(CONF_DISABLED, default=False): cv.boolean,
104
107
  }
105
108
  )(config)
106
109
 
@@ -111,6 +114,8 @@ FINAL_VALIDATE_SCHEMA = validate_psram_mode
111
114
 
112
115
 
113
116
  async def to_code(config):
117
+ if config[CONF_DISABLED]:
118
+ return
114
119
  if CORE.using_arduino:
115
120
  cg.add_build_flag("-DBOARD_HAS_PSRAM")
116
121
  if config[CONF_MODE] == TYPE_OCTAL:
@@ -156,7 +156,6 @@ pulse_counter_t HwPulseCounterStorage::read_raw_value() {
156
156
  #endif // HAS_PCNT
157
157
 
158
158
  void PulseCounterSensor::setup() {
159
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
160
159
  if (!this->storage_.pulse_counter_setup(this->pin_)) {
161
160
  this->mark_failed();
162
161
  return;
@@ -49,12 +49,15 @@ def validate_internal_filter(value):
49
49
  [CONF_USE_PCNT],
50
50
  )
51
51
 
52
- if CORE.is_esp32 and use_pcnt:
53
- if value.get(CONF_INTERNAL_FILTER).total_microseconds > 13:
54
- raise cv.Invalid(
55
- "Maximum internal filter value when using ESP32 hardware PCNT is 13us",
56
- [CONF_INTERNAL_FILTER],
57
- )
52
+ if (
53
+ CORE.is_esp32
54
+ and use_pcnt
55
+ and value.get(CONF_INTERNAL_FILTER).total_microseconds > 13
56
+ ):
57
+ raise cv.Invalid(
58
+ "Maximum internal filter value when using ESP32 hardware PCNT is 13us",
59
+ [CONF_INTERNAL_FILTER],
60
+ )
58
61
 
59
62
  return value
60
63
 
@@ -26,7 +26,6 @@ void PylontechComponent::dump_config() {
26
26
  }
27
27
 
28
28
  void PylontechComponent::setup() {
29
- ESP_LOGCONFIG(TAG, "Running setup");
30
29
  while (this->available() != 0) {
31
30
  this->read();
32
31
  }
@@ -24,7 +24,6 @@ static const uint8_t QMC5883L_REGISTER_CONTROL_2 = 0x0A;
24
24
  static const uint8_t QMC5883L_REGISTER_PERIOD = 0x0B;
25
25
 
26
26
  void QMC5883LComponent::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  // Soft Reset
29
28
  if (!this->write_byte(QMC5883L_REGISTER_CONTROL_2, 1 << 7)) {
30
29
  this->error_code_ = COMMUNICATION_FAILED;
@@ -348,8 +348,6 @@ void QMP6988Component::calculate_pressure_() {
348
348
  }
349
349
 
350
350
  void QMP6988Component::setup() {
351
- ESP_LOGCONFIG(TAG, "Running setup");
352
-
353
351
  bool ret;
354
352
  ret = this->device_check_();
355
353
  if (!ret) {
@@ -73,9 +73,8 @@ def map_sequence(value):
73
73
 
74
74
  def _validate(config):
75
75
  chip = DriverChip.chips[config[CONF_MODEL]]
76
- if not chip.initsequence:
77
- if CONF_INIT_SEQUENCE not in config:
78
- raise cv.Invalid(f"{chip.name} model requires init_sequence")
76
+ if not chip.initsequence and CONF_INIT_SEQUENCE not in config:
77
+ raise cv.Invalid(f"{chip.name} model requires init_sequence")
79
78
  return config
80
79
 
81
80
 
@@ -6,7 +6,6 @@ namespace esphome {
6
6
  namespace qspi_dbi {
7
7
 
8
8
  void QspiDbi::setup() {
9
- ESP_LOGCONFIG(TAG, "Running setup");
10
9
  this->spi_setup();
11
10
  if (this->enable_pin_ != nullptr) {
12
11
  this->enable_pin_->setup();
@@ -113,7 +112,6 @@ void QspiDbi::write_init_sequence_() {
113
112
  }
114
113
  this->reset_params_(true);
115
114
  this->setup_complete_ = true;
116
- ESP_LOGCONFIG(TAG, "QSPI_DBI setup complete");
117
115
  }
118
116
 
119
117
  void QspiDbi::set_addr_window_(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
@@ -24,9 +24,8 @@ QwiicPIRComponent = qwiic_pir_ns.class_(
24
24
 
25
25
 
26
26
  def validate_no_debounce_unless_native(config):
27
- if CONF_DEBOUNCE in config:
28
- if config[CONF_DEBOUNCE_MODE] != "NATIVE":
29
- raise cv.Invalid("debounce can only be set if debounce_mode is NATIVE")
27
+ if CONF_DEBOUNCE in config and config[CONF_DEBOUNCE_MODE] != "NATIVE":
28
+ raise cv.Invalid("debounce can only be set if debounce_mode is NATIVE")
30
29
  return config
31
30
 
32
31
 
@@ -7,8 +7,6 @@ namespace qwiic_pir {
7
7
  static const char *const TAG = "qwiic_pir";
8
8
 
9
9
  void QwiicPIRComponent::setup() {
10
- ESP_LOGCONFIG(TAG, "Running setup");
11
-
12
10
  // Verify I2C communcation by reading and verifying the chip ID
13
11
  uint8_t chip_id;
14
12
  if (!this->read_byte(QWIIC_PIR_CHIP_ID, &chip_id)) {
@@ -1,4 +1,5 @@
1
1
  #include "rc522.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  // Based on:
@@ -13,30 +14,6 @@ static const char *const TAG = "rc522";
13
14
 
14
15
  static const uint8_t RESET_COUNT = 5;
15
16
 
16
- std::string format_buffer(uint8_t *b, uint8_t len) {
17
- char buf[32];
18
- int offset = 0;
19
- for (uint8_t i = 0; i < len; i++) {
20
- const char *format = "%02X";
21
- if (i + 1 < len)
22
- format = "%02X-";
23
- offset += sprintf(buf + offset, format, b[i]);
24
- }
25
- return std::string(buf);
26
- }
27
-
28
- std::string format_uid(std::vector<uint8_t> &uid) {
29
- char buf[32];
30
- int offset = 0;
31
- for (size_t i = 0; i < uid.size(); i++) {
32
- const char *format = "%02X";
33
- if (i + 1 < uid.size())
34
- format = "%02X-";
35
- offset += sprintf(buf + offset, format, uid[i]);
36
- }
37
- return std::string(buf);
38
- }
39
-
40
17
  void RC522::setup() {
41
18
  state_ = STATE_SETUP;
42
19
  // Pull device out of power down / reset state.
@@ -215,7 +192,7 @@ void RC522::loop() {
215
192
  ESP_LOGV(TAG, "STATE_READ_SERIAL_DONE -> TIMEOUT (no tag present) %d", status);
216
193
  } else {
217
194
  ESP_LOGW(TAG, "Unexpected response. Read status is %d. Read bytes: %d (%s)", status, back_length_,
218
- format_buffer(buffer_, 9).c_str());
195
+ format_hex_pretty(buffer_, back_length_, '-', false).c_str());
219
196
  }
220
197
 
221
198
  state_ = STATE_DONE;
@@ -239,7 +216,7 @@ void RC522::loop() {
239
216
 
240
217
  std::vector<uint8_t> rfid_uid(std::begin(uid_buffer_), std::begin(uid_buffer_) + uid_idx_);
241
218
  uid_idx_ = 0;
242
- // ESP_LOGD(TAG, "Processing '%s'", format_uid(rfid_uid).c_str());
219
+ // ESP_LOGD(TAG, "Processing '%s'", format_hex_pretty(rfid_uid, '-', false).c_str());
243
220
  pcd_antenna_off_();
244
221
  state_ = STATE_INIT; // scan again on next update
245
222
  bool report = true;
@@ -260,13 +237,13 @@ void RC522::loop() {
260
237
  trigger->process(rfid_uid);
261
238
 
262
239
  if (report) {
263
- ESP_LOGD(TAG, "Found new tag '%s'", format_uid(rfid_uid).c_str());
240
+ ESP_LOGD(TAG, "Found new tag '%s'", format_hex_pretty(rfid_uid, '-', false).c_str());
264
241
  }
265
242
  break;
266
243
  }
267
244
  case STATE_DONE: {
268
245
  if (!this->current_uid_.empty()) {
269
- ESP_LOGV(TAG, "Tag '%s' removed", format_uid(this->current_uid_).c_str());
246
+ ESP_LOGV(TAG, "Tag '%s' removed", format_hex_pretty(this->current_uid_, '-', false).c_str());
270
247
  for (auto *trigger : this->triggers_ontagremoved_)
271
248
  trigger->process(this->current_uid_);
272
249
  }
@@ -361,7 +338,7 @@ void RC522::pcd_clear_register_bit_mask_(PcdRegister reg, ///< The register to
361
338
  * @return STATUS_OK on success, STATUS_??? otherwise.
362
339
  */
363
340
  void RC522::pcd_transceive_data_(uint8_t send_len) {
364
- ESP_LOGV(TAG, "PCD TRANSCEIVE: RX: %s", format_buffer(buffer_, send_len).c_str());
341
+ ESP_LOGV(TAG, "PCD TRANSCEIVE: RX: %s", format_hex_pretty(buffer_, send_len, '-', false).c_str());
365
342
  delayMicroseconds(1000); // we need 1 ms delay between antenna on and those communication commands
366
343
  send_len_ = send_len;
367
344
  // Prepare values for BitFramingReg
@@ -435,7 +412,8 @@ RC522::StatusCode RC522::await_transceive_() {
435
412
  error_reg_value); // TODO: is this always due to collissions?
436
413
  return STATUS_ERROR;
437
414
  }
438
- ESP_LOGV(TAG, "received %d bytes: %s", back_length_, format_buffer(buffer_ + send_len_, back_length_).c_str());
415
+ ESP_LOGV(TAG, "received %d bytes: %s", back_length_,
416
+ format_hex_pretty(buffer_ + send_len_, back_length_, '-', false).c_str());
439
417
 
440
418
  return STATUS_OK;
441
419
  }
@@ -499,7 +477,7 @@ bool RC522BinarySensor::process(std::vector<uint8_t> &data) {
499
477
  this->found_ = result;
500
478
  return result;
501
479
  }
502
- void RC522Trigger::process(std::vector<uint8_t> &data) { this->trigger(format_uid(data)); }
480
+ void RC522Trigger::process(std::vector<uint8_t> &data) { this->trigger(format_hex_pretty(data, '-', false)); }
503
481
 
504
482
  } // namespace rc522
505
483
  } // namespace esphome
@@ -10,7 +10,6 @@ namespace rc522_spi {
10
10
  static const char *const TAG = "rc522_spi";
11
11
 
12
12
  void RC522Spi::setup() {
13
- ESP_LOGI(TAG, "SPI Setup");
14
13
  this->spi_setup();
15
14
 
16
15
  RC522::setup();