esphome 2025.6.3__py3-none-any.whl → 2025.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. esphome/__main__.py +1 -3
  2. esphome/codegen.py +2 -0
  3. esphome/components/ac_dimmer/ac_dimmer.cpp +6 -6
  4. esphome/components/adc/__init__.py +25 -1
  5. esphome/components/adc/adc_sensor.h +11 -11
  6. esphome/components/adc/adc_sensor_common.cpp +1 -1
  7. esphome/components/adc/adc_sensor_esp32.cpp +16 -8
  8. esphome/components/ade7880/ade7880.h +0 -2
  9. esphome/components/ads1115/ads1115.h +0 -1
  10. esphome/components/ads1118/ads1118.h +0 -1
  11. esphome/components/ags10/ags10.h +0 -2
  12. esphome/components/aic3204/aic3204.h +0 -1
  13. esphome/components/alarm_control_panel/__init__.py +5 -2
  14. esphome/components/alpha3/alpha3.h +0 -1
  15. esphome/components/am43/cover/am43_cover.h +0 -1
  16. esphome/components/am43/sensor/am43_sensor.h +0 -1
  17. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +0 -2
  18. esphome/components/anova/anova.cpp +5 -1
  19. esphome/components/anova/anova.h +0 -1
  20. esphome/components/apds9960/apds9960.cpp +1 -1
  21. esphome/components/api/__init__.py +57 -21
  22. esphome/components/api/api_connection.cpp +344 -539
  23. esphome/components/api/api_connection.h +224 -141
  24. esphome/components/api/api_frame_helper.cpp +91 -127
  25. esphome/components/api/api_frame_helper.h +64 -54
  26. esphome/components/api/api_pb2.cpp +1837 -9044
  27. esphome/components/api/api_pb2.h +532 -685
  28. esphome/components/api/api_pb2_dump.cpp +4432 -0
  29. esphome/components/api/api_pb2_service.cpp +184 -425
  30. esphome/components/api/api_pb2_service.h +13 -6
  31. esphome/components/api/api_server.cpp +131 -167
  32. esphome/components/api/api_server.h +38 -10
  33. esphome/components/api/client.py +8 -2
  34. esphome/components/api/custom_api_device.h +8 -0
  35. esphome/components/api/list_entities.cpp +37 -104
  36. esphome/components/api/list_entities.h +33 -23
  37. esphome/components/api/proto.h +532 -26
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/api/user_services.h +2 -0
  41. esphome/components/as3935_spi/as3935_spi.h +0 -2
  42. esphome/components/as5600/as5600.h +0 -1
  43. esphome/components/async_tcp/__init__.py +14 -5
  44. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  45. esphome/components/atm90e32/atm90e32.cpp +2 -1
  46. esphome/components/audio/audio_decoder.cpp +1 -1
  47. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  48. esphome/components/b_parasite/b_parasite.h +0 -1
  49. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  50. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  51. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  52. esphome/components/bh1750/bh1750.cpp +5 -5
  53. esphome/components/binary_sensor/__init__.py +82 -5
  54. esphome/components/binary_sensor/automation.h +19 -1
  55. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  56. esphome/components/binary_sensor/binary_sensor.h +11 -25
  57. esphome/components/binary_sensor/filter.cpp +29 -24
  58. esphome/components/binary_sensor/filter.h +20 -10
  59. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  60. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  63. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  64. esphome/components/ble_client/switch/ble_switch.h +0 -1
  65. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  66. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  67. esphome/components/ble_presence/ble_presence_device.h +0 -1
  68. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  69. esphome/components/ble_scanner/ble_scanner.h +0 -1
  70. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  71. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  72. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  73. esphome/components/bme680/sensor.py +1 -1
  74. esphome/components/bmp581/bmp581.h +0 -2
  75. esphome/components/button/__init__.py +5 -2
  76. esphome/components/camera/__init__.py +1 -0
  77. esphome/components/camera/camera.cpp +22 -0
  78. esphome/components/camera/camera.h +80 -0
  79. esphome/components/canbus/__init__.py +1 -0
  80. esphome/components/cap1188/cap1188.h +0 -1
  81. esphome/components/captive_portal/__init__.py +12 -2
  82. esphome/components/captive_portal/captive_portal.cpp +12 -2
  83. esphome/components/captive_portal/captive_portal.h +5 -2
  84. esphome/components/ccs811/ccs811.h +0 -2
  85. esphome/components/climate/__init__.py +5 -2
  86. esphome/components/cm1106/sensor.py +2 -2
  87. esphome/components/const/__init__.py +2 -0
  88. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  89. esphome/components/copy/button/copy_button.h +0 -1
  90. esphome/components/copy/cover/copy_cover.h +0 -1
  91. esphome/components/copy/fan/copy_fan.h +0 -1
  92. esphome/components/copy/lock/copy_lock.h +0 -1
  93. esphome/components/copy/number/copy_number.h +0 -1
  94. esphome/components/copy/select/copy_select.h +0 -1
  95. esphome/components/copy/sensor/copy_sensor.h +0 -1
  96. esphome/components/copy/switch/copy_switch.h +0 -1
  97. esphome/components/copy/text/copy_text.h +0 -1
  98. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  99. esphome/components/cover/__init__.py +5 -2
  100. esphome/components/cs5460a/cs5460a.h +0 -1
  101. esphome/components/datetime/__init__.py +4 -2
  102. esphome/components/debug/__init__.py +20 -0
  103. esphome/components/debug/debug_esp32.cpp +2 -0
  104. esphome/components/deep_sleep/__init__.py +43 -9
  105. esphome/components/demo/__init__.py +2 -2
  106. esphome/components/display/display.cpp +4 -3
  107. esphome/components/display/display.h +0 -2
  108. esphome/components/display/display_buffer.cpp +1 -1
  109. esphome/components/ds2484/__init__.py +1 -0
  110. esphome/components/ds2484/ds2484.cpp +209 -0
  111. esphome/components/ds2484/ds2484.h +43 -0
  112. esphome/components/ds2484/one_wire.py +37 -0
  113. esphome/components/duty_time/duty_time_sensor.h +0 -1
  114. esphome/components/ens160_base/ens160_base.h +0 -1
  115. esphome/components/es7210/es7210.h +0 -1
  116. esphome/components/es7243e/es7243e.h +0 -1
  117. esphome/components/es8156/es8156.h +0 -1
  118. esphome/components/es8311/es8311.h +0 -1
  119. esphome/components/es8388/es8388.h +0 -1
  120. esphome/components/esp32/__init__.py +103 -135
  121. esphome/components/esp32/core.cpp +0 -4
  122. esphome/components/esp32/gpio.h +1 -1
  123. esphome/components/esp32/helpers.cpp +69 -0
  124. esphome/components/esp32_ble/ble.cpp +5 -6
  125. esphome/components/esp32_ble/ble.h +29 -14
  126. esphome/components/esp32_ble/ble_event.h +6 -6
  127. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  128. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  129. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  130. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  131. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  132. esphome/components/esp32_camera/__init__.py +112 -98
  133. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  134. esphome/components/esp32_camera/esp32_camera.h +35 -30
  135. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  136. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  137. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  138. esphome/components/esp32_hall/sensor.py +2 -21
  139. esphome/components/esp32_hosted/__init__.py +101 -0
  140. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  141. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  142. esphome/components/esp32_rmt/__init__.py +0 -58
  143. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  144. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  145. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  146. esphome/components/esp32_touch/esp32_touch.h +174 -28
  147. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  148. esphome/components/esp32_touch/esp32_touch_v1.cpp +240 -0
  149. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  150. esphome/components/esp8266/__init__.py +2 -0
  151. esphome/components/esp8266/gpio.cpp +10 -10
  152. esphome/components/esp8266/helpers.cpp +31 -0
  153. esphome/components/esp_ldo/__init__.py +10 -8
  154. esphome/components/esp_ldo/esp_ldo.h +3 -0
  155. esphome/components/esphome/ota/__init__.py +1 -0
  156. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  157. esphome/components/ethernet/__init__.py +42 -23
  158. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  159. esphome/components/ethernet/ethernet_component.cpp +69 -29
  160. esphome/components/ethernet/ethernet_component.h +18 -10
  161. esphome/components/event/__init__.py +5 -2
  162. esphome/components/ezo/ezo.h +0 -1
  163. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  164. esphome/components/fan/__init__.py +5 -2
  165. esphome/components/fan/fan.cpp +4 -0
  166. esphome/components/feedback/feedback_cover.h +0 -1
  167. esphome/components/font/__init__.py +92 -82
  168. esphome/components/font/font.cpp +9 -2
  169. esphome/components/font/font.h +20 -5
  170. esphome/components/fs3000/fs3000.h +0 -1
  171. esphome/components/gcja5/gcja5.h +0 -1
  172. esphome/components/gl_r01_i2c/__init__.py +0 -0
  173. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  174. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  175. esphome/components/gl_r01_i2c/sensor.py +36 -0
  176. esphome/components/gp8403/gp8403.h +0 -1
  177. esphome/components/gpio/binary_sensor/__init__.py +39 -1
  178. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  179. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  180. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  181. esphome/components/he60r/he60r.h +0 -1
  182. esphome/components/heatpumpir/climate.py +2 -1
  183. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  184. esphome/components/heatpumpir/heatpumpir.h +1 -0
  185. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  186. esphome/components/host/__init__.py +3 -1
  187. esphome/components/host/helpers.cpp +57 -0
  188. esphome/components/http_request/__init__.py +19 -1
  189. esphome/components/http_request/http_request.h +1 -1
  190. esphome/components/http_request/http_request_arduino.h +1 -0
  191. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  192. esphome/components/http_request/update/http_request_update.cpp +35 -16
  193. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  194. esphome/components/hydreon_rgxx/sensor.py +1 -1
  195. esphome/components/i2c/__init__.py +23 -11
  196. esphome/components/i2c/i2c_bus.h +8 -1
  197. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  198. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  199. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  200. esphome/components/i2c_device/i2c_device.h +0 -1
  201. esphome/components/i2s_audio/__init__.py +2 -10
  202. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  203. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  204. esphome/components/i2s_audio/speaker/__init__.py +1 -1
  205. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  206. esphome/components/iaqcore/iaqcore.h +0 -2
  207. esphome/components/image/__init__.py +123 -24
  208. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  209. esphome/components/ina219/ina219.cpp +7 -0
  210. esphome/components/ina219/ina219.h +1 -0
  211. esphome/components/ina260/ina260.h +0 -2
  212. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  213. esphome/components/inkplate6/display.py +15 -0
  214. esphome/components/inkplate6/inkplate.cpp +2 -2
  215. esphome/components/integration/integration_sensor.h +0 -1
  216. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  217. esphome/components/internal_temperature/sensor.py +0 -26
  218. esphome/components/interval/interval.h +0 -2
  219. esphome/components/json/__init__.py +1 -1
  220. esphome/components/json/json_util.cpp +56 -63
  221. esphome/components/ld2410/button/__init__.py +3 -3
  222. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  223. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  224. esphome/components/ld2410/ld2410.cpp +421 -268
  225. esphome/components/ld2410/ld2410.h +44 -146
  226. esphome/components/ld2410/number/__init__.py +2 -2
  227. esphome/components/ld2410/sensor.py +1 -1
  228. esphome/components/ld2410/switch/__init__.py +1 -1
  229. esphome/components/ld2420/binary_sensor/ld2420_binary_sensor.cpp +2 -2
  230. esphome/components/ld2420/button/reconfig_buttons.cpp +1 -1
  231. esphome/components/ld2420/ld2420.cpp +252 -147
  232. esphome/components/ld2420/ld2420.h +52 -126
  233. esphome/components/ld2420/number/__init__.py +2 -2
  234. esphome/components/ld2420/number/gate_config_number.cpp +1 -1
  235. esphome/components/ld2420/select/operating_mode_select.cpp +1 -1
  236. esphome/components/ld2420/sensor/__init__.py +6 -2
  237. esphome/components/ld2420/sensor/ld2420_sensor.cpp +2 -2
  238. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  239. esphome/components/ld2420/text_sensor/text_sensor.cpp +2 -2
  240. esphome/components/ld2450/button/__init__.py +3 -3
  241. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  242. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  243. esphome/components/ld2450/ld2450.cpp +384 -232
  244. esphome/components/ld2450/ld2450.h +60 -69
  245. esphome/components/ld2450/switch/__init__.py +1 -1
  246. esphome/components/ledc/ledc_output.cpp +1 -63
  247. esphome/components/libretiny/__init__.py +5 -3
  248. esphome/components/libretiny/const.py +5 -0
  249. esphome/components/libretiny/generate_components.py +1 -0
  250. esphome/components/libretiny/helpers.cpp +35 -0
  251. esphome/components/libretiny/lt_component.cpp +5 -3
  252. esphome/components/light/__init__.py +4 -2
  253. esphome/components/light/addressable_light.h +3 -3
  254. esphome/components/light/light_call.cpp +180 -243
  255. esphome/components/light/light_call.h +72 -20
  256. esphome/components/light/light_color_values.h +14 -14
  257. esphome/components/light/light_json_schema.cpp +17 -16
  258. esphome/components/light/light_state.h +15 -13
  259. esphome/components/light/transformers.h +2 -2
  260. esphome/components/ln882x/__init__.py +52 -0
  261. esphome/components/ln882x/boards.py +285 -0
  262. esphome/components/lock/__init__.py +5 -2
  263. esphome/components/logger/__init__.py +40 -3
  264. esphome/components/logger/logger.cpp +47 -12
  265. esphome/components/logger/logger.h +80 -49
  266. esphome/components/logger/logger_esp32.cpp +3 -3
  267. esphome/components/lps22/__init__.py +0 -0
  268. esphome/components/lps22/lps22.cpp +75 -0
  269. esphome/components/lps22/lps22.h +27 -0
  270. esphome/components/lps22/sensor.py +58 -0
  271. esphome/components/ltr390/ltr390.h +0 -1
  272. esphome/components/ltr501/ltr501.h +0 -1
  273. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  274. esphome/components/lvgl/__init__.py +1 -1
  275. esphome/components/lvgl/schemas.py +66 -6
  276. esphome/components/lvgl/styles.py +24 -16
  277. esphome/components/lvgl/widgets/__init__.py +12 -2
  278. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  279. esphome/components/lvgl/widgets/meter.py +20 -13
  280. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  281. esphome/components/max9611/max9611.h +0 -1
  282. esphome/components/mcp23016/__init__.py +1 -1
  283. esphome/components/mcp23xxx_base/__init__.py +1 -1
  284. esphome/components/mcp4461/__init__.py +1 -1
  285. esphome/components/mcp4461/output/__init__.py +3 -2
  286. esphome/components/mcp9600/mcp9600.h +0 -2
  287. esphome/components/md5/md5.cpp +3 -3
  288. esphome/components/md5/md5.h +1 -6
  289. esphome/components/mdns/__init__.py +22 -11
  290. esphome/components/media_player/__init__.py +4 -3
  291. esphome/components/micro_wake_word/__init__.py +1 -5
  292. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  293. esphome/components/microphone/microphone.cpp +7 -9
  294. esphome/components/microphone/microphone.h +0 -2
  295. esphome/components/mipi_spi/display.py +1 -0
  296. esphome/components/mmc5603/mmc5603.cpp +1 -1
  297. esphome/components/modbus/modbus.cpp +33 -15
  298. esphome/components/modbus/modbus.h +9 -0
  299. esphome/components/modbus_controller/__init__.py +42 -10
  300. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  301. esphome/components/modbus_controller/modbus_controller.h +61 -7
  302. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  303. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  304. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  305. esphome/components/mqtt/__init__.py +16 -0
  306. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +2 -1
  307. esphome/components/mqtt/mqtt_backend.h +2 -1
  308. esphome/components/mqtt/mqtt_backend_esp32.cpp +132 -47
  309. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  310. esphome/components/mqtt/mqtt_binary_sensor.cpp +1 -0
  311. esphome/components/mqtt/mqtt_button.cpp +4 -1
  312. esphome/components/mqtt/mqtt_client.cpp +17 -9
  313. esphome/components/mqtt/mqtt_client.h +8 -3
  314. esphome/components/mqtt/mqtt_climate.cpp +6 -4
  315. esphome/components/mqtt/mqtt_component.cpp +3 -1
  316. esphome/components/mqtt/mqtt_cover.cpp +1 -0
  317. esphome/components/mqtt/mqtt_date.cpp +4 -3
  318. esphome/components/mqtt/mqtt_datetime.cpp +7 -6
  319. esphome/components/mqtt/mqtt_event.cpp +6 -3
  320. esphome/components/mqtt/mqtt_fan.cpp +1 -0
  321. esphome/components/mqtt/mqtt_light.cpp +8 -4
  322. esphome/components/mqtt/mqtt_lock.cpp +3 -1
  323. esphome/components/mqtt/mqtt_number.cpp +1 -0
  324. esphome/components/mqtt/mqtt_select.cpp +2 -1
  325. esphome/components/mqtt/mqtt_sensor.cpp +3 -1
  326. esphome/components/mqtt/mqtt_switch.cpp +3 -1
  327. esphome/components/mqtt/mqtt_text.cpp +1 -0
  328. esphome/components/mqtt/mqtt_text_sensor.cpp +3 -1
  329. esphome/components/mqtt/mqtt_time.cpp +4 -3
  330. esphome/components/mqtt/mqtt_update.cpp +1 -0
  331. esphome/components/mqtt/mqtt_valve.cpp +3 -1
  332. esphome/components/ms8607/ms8607.cpp +1 -1
  333. esphome/components/ms8607/ms8607.h +0 -1
  334. esphome/components/neopixelbus/light.py +4 -1
  335. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  336. esphome/components/network/__init__.py +4 -1
  337. esphome/components/network/ip_address.h +1 -0
  338. esphome/components/nextion/__init__.py +16 -0
  339. esphome/components/nextion/base_component.py +1 -0
  340. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  341. esphome/components/nextion/display.py +14 -4
  342. esphome/components/nextion/nextion.cpp +166 -101
  343. esphome/components/nextion/nextion.h +84 -53
  344. esphome/components/nextion/nextion_commands.cpp +11 -10
  345. esphome/components/nextion/nextion_component.cpp +28 -28
  346. esphome/components/nextion/nextion_component.h +53 -18
  347. esphome/components/nextion/nextion_component_base.h +3 -0
  348. esphome/components/nextion/nextion_upload.cpp +36 -0
  349. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  350. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  351. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  352. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  353. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  354. esphome/components/nfc/nfc.cpp +3 -22
  355. esphome/components/nfc/nfc.h +3 -3
  356. esphome/components/number/__init__.py +5 -2
  357. esphome/components/online_image/__init__.py +9 -1
  358. esphome/components/online_image/online_image.cpp +17 -7
  359. esphome/components/online_image/online_image.h +10 -2
  360. esphome/components/opentherm/opentherm.cpp +7 -12
  361. esphome/components/opentherm/output/output.cpp +1 -1
  362. esphome/components/openthread/__init__.py +47 -40
  363. esphome/components/openthread/const.py +1 -0
  364. esphome/components/openthread/openthread_esp.cpp +27 -5
  365. esphome/components/opt3001/__init__.py +0 -0
  366. esphome/components/opt3001/opt3001.cpp +122 -0
  367. esphome/components/opt3001/opt3001.h +27 -0
  368. esphome/components/opt3001/sensor.py +35 -0
  369. esphome/components/ota/__init__.py +17 -0
  370. esphome/components/ota/ota_backend.h +27 -1
  371. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  372. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  373. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  374. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  375. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  376. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  377. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  378. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  379. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  380. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  381. esphome/components/packages/__init__.py +5 -2
  382. esphome/components/packet_transport/binary_sensor.py +61 -4
  383. esphome/components/packet_transport/packet_transport.cpp +34 -1
  384. esphome/components/packet_transport/packet_transport.h +11 -5
  385. esphome/components/pcf8574/__init__.py +1 -1
  386. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  387. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  388. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  389. esphome/components/pmsa003i/pmsa003i.h +0 -1
  390. esphome/components/pmsx003/pmsx003.h +0 -1
  391. esphome/components/pn7150/pn7150.cpp +7 -7
  392. esphome/components/pn7150/pn7150.h +0 -1
  393. esphome/components/pn7160/pn7160.cpp +7 -7
  394. esphome/components/pn7160/pn7160.h +0 -1
  395. esphome/components/preferences/syncer.h +2 -0
  396. esphome/components/prometheus/prometheus_handler.h +1 -1
  397. esphome/components/psram/psram.cpp +0 -20
  398. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  399. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  400. esphome/components/pulse_width/pulse_width.h +0 -1
  401. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  402. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  403. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  404. esphome/components/qr_code/__init__.py +13 -10
  405. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  406. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  407. esphome/components/rc522/rc522.h +0 -1
  408. esphome/components/rdm6300/rdm6300.h +0 -2
  409. esphome/components/remote_base/__init__.py +7 -5
  410. esphome/components/remote_base/remote_base.cpp +24 -21
  411. esphome/components/remote_base/remote_base.h +3 -26
  412. esphome/components/remote_receiver/__init__.py +40 -46
  413. esphome/components/remote_receiver/remote_receiver.h +4 -18
  414. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  415. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  416. esphome/components/remote_transmitter/__init__.py +42 -43
  417. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  418. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  419. esphome/components/resistance/resistance_sensor.h +0 -1
  420. esphome/components/rp2040/__init__.py +2 -0
  421. esphome/components/rp2040/helpers.cpp +55 -0
  422. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  423. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  424. esphome/components/rtttl/__init__.py +4 -4
  425. esphome/components/rtttl/rtttl.cpp +10 -1
  426. esphome/components/ruuvitag/ruuvitag.h +0 -1
  427. esphome/components/safe_mode/safe_mode.cpp +2 -0
  428. esphome/components/safe_mode/safe_mode.h +4 -1
  429. esphome/components/scd30/scd30.h +0 -1
  430. esphome/components/scd30/sensor.py +2 -2
  431. esphome/components/scd4x/scd4x.cpp +61 -54
  432. esphome/components/scd4x/scd4x.h +17 -15
  433. esphome/components/scd4x/sensor.py +4 -4
  434. esphome/components/script/script.h +0 -2
  435. esphome/components/sdp3x/sensor.py +1 -1
  436. esphome/components/select/__init__.py +5 -2
  437. esphome/components/sen5x/sen5x.h +0 -1
  438. esphome/components/senseair/senseair.h +0 -1
  439. esphome/components/sensor/__init__.py +4 -2
  440. esphome/components/sensor/filter.cpp +1 -1
  441. esphome/components/sensor/sensor.cpp +12 -6
  442. esphome/components/sensor/sensor.h +13 -5
  443. esphome/components/servo/servo.cpp +2 -2
  444. esphome/components/servo/servo.h +0 -1
  445. esphome/components/sfa30/sfa30.h +0 -1
  446. esphome/components/sgp30/sgp30.h +0 -1
  447. esphome/components/sgp4x/sgp4x.h +0 -1
  448. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  449. esphome/components/sht4x/sht4x.h +0 -1
  450. esphome/components/sm300d2/sm300d2.h +0 -2
  451. esphome/components/smt100/sensor.py +8 -4
  452. esphome/components/smt100/smt100.cpp +5 -5
  453. esphome/components/smt100/smt100.h +3 -3
  454. esphome/components/sn74hc595/__init__.py +1 -1
  455. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  456. esphome/components/sntp/sntp_component.cpp +9 -3
  457. esphome/components/sntp/time.py +2 -0
  458. esphome/components/socket/__init__.py +17 -0
  459. esphome/components/spi/__init__.py +27 -6
  460. esphome/components/spi/spi.cpp +3 -2
  461. esphome/components/spi/spi.h +9 -3
  462. esphome/components/spi/spi_arduino.cpp +3 -5
  463. esphome/components/spi/spi_esp_idf.cpp +40 -21
  464. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  465. esphome/components/sps30/sps30.h +0 -1
  466. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  467. esphome/components/st7701s/st7701s.cpp +0 -4
  468. esphome/components/status/status_binary_sensor.h +0 -2
  469. esphome/components/substitutions/__init__.py +81 -21
  470. esphome/components/substitutions/jinja.py +99 -0
  471. esphome/components/sun/sun.cpp +3 -4
  472. esphome/components/switch/__init__.py +5 -2
  473. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  474. esphome/components/sx126x/__init__.py +317 -0
  475. esphome/components/sx126x/automation.h +62 -0
  476. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  477. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  478. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  479. esphome/components/sx126x/sx126x.cpp +523 -0
  480. esphome/components/sx126x/sx126x.h +140 -0
  481. esphome/components/sx126x/sx126x_reg.h +163 -0
  482. esphome/components/sx127x/__init__.py +325 -0
  483. esphome/components/sx127x/automation.h +62 -0
  484. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  485. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  486. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  487. esphome/components/sx127x/sx127x.cpp +498 -0
  488. esphome/components/sx127x/sx127x.h +128 -0
  489. esphome/components/sx127x/sx127x_reg.h +295 -0
  490. esphome/components/syslog/esphome_syslog.cpp +5 -3
  491. esphome/components/syslog/esphome_syslog.h +1 -1
  492. esphome/components/tca9555/__init__.py +1 -1
  493. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  494. esphome/components/text/__init__.py +5 -2
  495. esphome/components/text_sensor/__init__.py +5 -2
  496. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  497. esphome/components/thermostat/thermostat_climate.h +43 -39
  498. esphome/components/time/__init__.py +16 -2
  499. esphome/components/time/real_time_clock.cpp +4 -0
  500. esphome/components/time/real_time_clock.h +5 -1
  501. esphome/components/tlc5971/tlc5971.cpp +4 -1
  502. esphome/components/tmp1075/tmp1075.h +0 -2
  503. esphome/components/tof10120/tof10120_sensor.h +0 -1
  504. esphome/components/tormatic/tormatic_cover.h +0 -1
  505. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  506. esphome/components/tsl2591/tsl2591.cpp +1 -1
  507. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  508. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  509. esphome/components/tx20/tx20.cpp +2 -2
  510. esphome/components/uart/__init__.py +18 -0
  511. esphome/components/uart/uart_component_esp_idf.cpp +0 -4
  512. esphome/components/update/__init__.py +5 -2
  513. esphome/components/update/update_entity.h +8 -0
  514. esphome/components/usb_host/__init__.py +5 -2
  515. esphome/components/usb_host/usb_host_client.cpp +10 -10
  516. esphome/components/usb_uart/cp210x.cpp +1 -1
  517. esphome/components/usb_uart/usb_uart.cpp +41 -44
  518. esphome/components/usb_uart/usb_uart.h +4 -3
  519. esphome/components/valve/__init__.py +5 -2
  520. esphome/components/vbus/vbus.h +0 -1
  521. esphome/components/veml3235/veml3235.h +0 -1
  522. esphome/components/veml7700/veml7700.h +0 -1
  523. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  524. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  525. esphome/components/watchdog/watchdog.cpp +0 -4
  526. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  527. esphome/components/web_server/__init__.py +34 -19
  528. esphome/components/web_server/ota/__init__.py +32 -0
  529. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  530. esphome/components/web_server/ota/ota_web_server.h +26 -0
  531. esphome/components/web_server/web_server.cpp +318 -436
  532. esphome/components/web_server/web_server.h +33 -23
  533. esphome/components/web_server/web_server_v1.cpp +4 -5
  534. esphome/components/web_server_base/__init__.py +5 -2
  535. esphome/components/web_server_base/web_server_base.cpp +2 -94
  536. esphome/components/web_server_base/web_server_base.h +5 -25
  537. esphome/components/web_server_idf/multipart.cpp +254 -0
  538. esphome/components/web_server_idf/multipart.h +86 -0
  539. esphome/components/web_server_idf/utils.cpp +32 -0
  540. esphome/components/web_server_idf/utils.h +10 -0
  541. esphome/components/web_server_idf/web_server_idf.cpp +164 -16
  542. esphome/components/web_server_idf/web_server_idf.h +11 -10
  543. esphome/components/wiegand/wiegand.cpp +2 -2
  544. esphome/components/wifi/__init__.py +18 -0
  545. esphome/components/wifi/wifi_component.cpp +17 -22
  546. esphome/components/wifi/wifi_component.h +27 -23
  547. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  548. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  549. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  550. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  551. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  552. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  553. esphome/components/wireguard/__init__.py +2 -11
  554. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  555. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  556. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  557. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  558. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  559. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  560. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  561. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  562. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  563. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  564. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  565. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  566. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  567. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  568. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  569. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  570. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  571. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  572. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  573. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  574. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  575. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  576. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  577. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  578. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  579. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  580. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  581. esphome/components/zyaura/zyaura.h +0 -1
  582. esphome/config.py +88 -22
  583. esphome/config_helpers.py +74 -1
  584. esphome/config_validation.py +12 -1
  585. esphome/const.py +65 -10
  586. esphome/core/__init__.py +18 -2
  587. esphome/core/application.cpp +169 -10
  588. esphome/core/application.h +145 -165
  589. esphome/core/area.h +19 -0
  590. esphome/core/automation.h +58 -9
  591. esphome/core/color.cpp +3 -5
  592. esphome/core/color.h +16 -16
  593. esphome/core/component.cpp +156 -22
  594. esphome/core/component.h +98 -4
  595. esphome/core/component_iterator.cpp +11 -9
  596. esphome/core/component_iterator.h +12 -10
  597. esphome/core/config.py +155 -6
  598. esphome/core/controller.cpp +4 -2
  599. esphome/core/controller.h +1 -1
  600. esphome/core/datatypes.h +2 -2
  601. esphome/core/defines.h +17 -2
  602. esphome/core/device.h +20 -0
  603. esphome/core/entity_base.cpp +20 -15
  604. esphome/core/entity_base.h +76 -0
  605. esphome/core/entity_helpers.py +168 -1
  606. esphome/core/event_pool.h +81 -0
  607. esphome/core/helpers.cpp +75 -230
  608. esphome/core/helpers.h +165 -105
  609. esphome/core/lock_free_queue.h +151 -0
  610. esphome/core/log.cpp +2 -2
  611. esphome/core/log.h +2 -0
  612. esphome/core/optional.h +5 -0
  613. esphome/core/ring_buffer.cpp +2 -2
  614. esphome/core/scheduler.cpp +275 -103
  615. esphome/core/scheduler.h +154 -17
  616. esphome/core/time.cpp +5 -5
  617. esphome/core/time.h +5 -5
  618. esphome/cpp_generator.py +17 -0
  619. esphome/cpp_helpers.py +0 -22
  620. esphome/cpp_types.py +3 -1
  621. esphome/dashboard/entries.py +1 -1
  622. esphome/dashboard/util/text.py +5 -21
  623. esphome/dashboard/web_server.py +9 -1
  624. esphome/helpers.py +47 -0
  625. esphome/loader.py +15 -1
  626. esphome/pins.py +14 -8
  627. esphome/platformio_api.py +2 -0
  628. esphome/wizard.py +17 -4
  629. esphome/writer.py +44 -3
  630. esphome/yaml_util.py +0 -2
  631. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/METADATA +10 -9
  632. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/RECORD +637 -578
  633. esphome/components/api/api_pb2_size.h +0 -361
  634. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  635. esphome/components/esp32_ble/queue.h +0 -85
  636. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  637. esphome/components/esp32_hall/esp32_hall.h +0 -23
  638. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  639. esphome/components/ld2410/button/reset_button.cpp +0 -9
  640. esphome/components/ld2450/button/reset_button.cpp +0 -9
  641. esphome/components/openthread/tlv.py +0 -65
  642. /esphome/{dashboard/enum.py → enum.py} +0 -0
  643. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/WHEEL +0 -0
  644. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/entry_points.txt +0 -0
  645. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/licenses/LICENSE +0 -0
  646. {esphome-2025.6.3.dist-info → esphome-2025.7.0.dist-info}/top_level.txt +0 -0
@@ -314,11 +314,43 @@ void PacketTransport::send_data_(bool all) {
314
314
  }
315
315
 
316
316
  void PacketTransport::update() {
317
+ if (!this->ping_pong_enable_) {
318
+ return;
319
+ }
317
320
  auto now = millis() / 1000;
318
321
  if (this->last_key_time_ + this->ping_pong_recyle_time_ < now) {
319
322
  this->resend_ping_key_ = this->ping_pong_enable_;
323
+ ESP_LOGV(TAG, "Ping request, age %u", now - this->last_key_time_);
320
324
  this->last_key_time_ = now;
321
325
  }
326
+ for (const auto &provider : this->providers_) {
327
+ uint32_t key_response_age = now - provider.second.last_key_response_time;
328
+ if (key_response_age > (this->ping_pong_recyle_time_ * 2u)) {
329
+ #ifdef USE_STATUS_SENSOR
330
+ if (provider.second.status_sensor != nullptr && provider.second.status_sensor->state) {
331
+ ESP_LOGI(TAG, "Ping status for %s timeout at %u with age %u", provider.first.c_str(), now, key_response_age);
332
+ provider.second.status_sensor->publish_state(false);
333
+ }
334
+ #endif
335
+ #ifdef USE_SENSOR
336
+ for (auto &sensor : this->remote_sensors_[provider.first]) {
337
+ sensor.second->publish_state(NAN);
338
+ }
339
+ #endif
340
+ #ifdef USE_BINARY_SENSOR
341
+ for (auto &sensor : this->remote_binary_sensors_[provider.first]) {
342
+ sensor.second->invalidate_state();
343
+ }
344
+ #endif
345
+ } else {
346
+ #ifdef USE_STATUS_SENSOR
347
+ if (provider.second.status_sensor != nullptr && !provider.second.status_sensor->state) {
348
+ ESP_LOGI(TAG, "Ping status for %s restored at %u with age %u", provider.first.c_str(), now, key_response_age);
349
+ provider.second.status_sensor->publish_state(true);
350
+ }
351
+ #endif
352
+ }
353
+ }
322
354
  }
323
355
 
324
356
  void PacketTransport::add_key_(const char *name, uint32_t key) {
@@ -437,7 +469,8 @@ void PacketTransport::process_(const std::vector<uint8_t> &data) {
437
469
  if (decoder.decode(PING_KEY, key) == DECODE_OK) {
438
470
  if (key == this->ping_key_) {
439
471
  ping_key_seen = true;
440
- ESP_LOGV(TAG, "Found good ping key %X", (unsigned) key);
472
+ provider.last_key_response_time = millis() / 1000;
473
+ ESP_LOGV(TAG, "Found good ping key %X at timestamp %" PRIu32, (unsigned) key, provider.last_key_response_time);
441
474
  } else {
442
475
  ESP_LOGV(TAG, "Unknown ping key %X", (unsigned) key);
443
476
  }
@@ -8,7 +8,7 @@
8
8
  #ifdef USE_BINARY_SENSOR
9
9
  #include "esphome/components/binary_sensor/binary_sensor.h"
10
10
  #endif
11
- #
11
+
12
12
  #include <vector>
13
13
  #include <map>
14
14
 
@@ -27,6 +27,10 @@ struct Provider {
27
27
  std::vector<uint8_t> encryption_key;
28
28
  const char *name;
29
29
  uint32_t last_code[2];
30
+ uint32_t last_key_response_time;
31
+ #ifdef USE_STATUS_SENSOR
32
+ binary_sensor::BinarySensor *status_sensor{nullptr};
33
+ #endif
30
34
  };
31
35
 
32
36
  #ifdef USE_SENSOR
@@ -75,10 +79,7 @@ class PacketTransport : public PollingComponent {
75
79
 
76
80
  void add_provider(const char *hostname) {
77
81
  if (this->providers_.count(hostname) == 0) {
78
- Provider provider;
79
- provider.encryption_key = std::vector<uint8_t>{};
80
- provider.last_code[0] = 0;
81
- provider.last_code[1] = 0;
82
+ Provider provider{};
82
83
  provider.name = hostname;
83
84
  this->providers_[hostname] = provider;
84
85
  #ifdef USE_SENSOR
@@ -97,6 +98,11 @@ class PacketTransport : public PollingComponent {
97
98
  void set_provider_encryption(const char *name, std::vector<uint8_t> key) {
98
99
  this->providers_[name].encryption_key = std::move(key);
99
100
  }
101
+ #ifdef USE_STATUS_SENSOR
102
+ void set_provider_status_sensor(const char *name, binary_sensor::BinarySensor *sensor) {
103
+ this->providers_[name].status_sensor = sensor;
104
+ }
105
+ #endif
100
106
  void set_platform_name(const char *name) { this->platform_name_ = name; }
101
107
 
102
108
  protected:
@@ -53,7 +53,7 @@ PCF8574_PIN_SCHEMA = pins.gpio_base_schema(
53
53
  cv.int_range(min=0, max=17),
54
54
  modes=[CONF_INPUT, CONF_OUTPUT],
55
55
  mode_validator=validate_mode,
56
- invertable=True,
56
+ invertible=True,
57
57
  ).extend(
58
58
  {
59
59
  cv.Required(CONF_PCF8574): cv.use_id(PCF8574Component),
@@ -0,0 +1,84 @@
1
+ from esphome import pins
2
+ import esphome.codegen as cg
3
+ from esphome.components import i2c
4
+ import esphome.config_validation as cv
5
+ from esphome.const import (
6
+ CONF_ID,
7
+ CONF_INPUT,
8
+ CONF_INVERTED,
9
+ CONF_MODE,
10
+ CONF_NUMBER,
11
+ CONF_OUTPUT,
12
+ CONF_PULLDOWN,
13
+ CONF_PULLUP,
14
+ CONF_RESET,
15
+ )
16
+
17
+ AUTO_LOAD = ["gpio_expander"]
18
+ CODEOWNERS = ["@jesserockz"]
19
+ DEPENDENCIES = ["i2c"]
20
+ MULTI_CONF = True
21
+
22
+
23
+ pi4ioe5v6408_ns = cg.esphome_ns.namespace("pi4ioe5v6408")
24
+ PI4IOE5V6408Component = pi4ioe5v6408_ns.class_(
25
+ "PI4IOE5V6408Component", cg.Component, i2c.I2CDevice
26
+ )
27
+ PI4IOE5V6408GPIOPin = pi4ioe5v6408_ns.class_("PI4IOE5V6408GPIOPin", cg.GPIOPin)
28
+
29
+ CONF_PI4IOE5V6408 = "pi4ioe5v6408"
30
+
31
+ CONFIG_SCHEMA = (
32
+ cv.Schema(
33
+ {
34
+ cv.Required(CONF_ID): cv.declare_id(PI4IOE5V6408Component),
35
+ cv.Optional(CONF_RESET, default=True): cv.boolean,
36
+ }
37
+ )
38
+ .extend(cv.COMPONENT_SCHEMA)
39
+ .extend(i2c.i2c_device_schema(0x43))
40
+ )
41
+
42
+
43
+ async def to_code(config):
44
+ var = cg.new_Pvariable(config[CONF_ID])
45
+ await cg.register_component(var, config)
46
+ await i2c.register_i2c_device(var, config)
47
+
48
+ cg.add(var.set_reset(config[CONF_RESET]))
49
+
50
+
51
+ def validate_mode(value):
52
+ if not (value[CONF_INPUT] or value[CONF_OUTPUT]):
53
+ raise cv.Invalid("Mode must be either input or output")
54
+ if value[CONF_INPUT] and value[CONF_OUTPUT]:
55
+ raise cv.Invalid("Mode must be either input or output")
56
+ return value
57
+
58
+
59
+ PI4IOE5V6408_PIN_SCHEMA = pins.gpio_base_schema(
60
+ PI4IOE5V6408GPIOPin,
61
+ cv.int_range(min=0, max=7),
62
+ modes=[
63
+ CONF_INPUT,
64
+ CONF_OUTPUT,
65
+ CONF_PULLUP,
66
+ CONF_PULLDOWN,
67
+ ],
68
+ mode_validator=validate_mode,
69
+ ).extend(
70
+ {
71
+ cv.Required(CONF_PI4IOE5V6408): cv.use_id(PI4IOE5V6408Component),
72
+ }
73
+ )
74
+
75
+
76
+ @pins.PIN_SCHEMA_REGISTRY.register(CONF_PI4IOE5V6408, PI4IOE5V6408_PIN_SCHEMA)
77
+ async def pi4ioe5v6408_pin_schema(config):
78
+ var = cg.new_Pvariable(config[CONF_ID])
79
+ await cg.register_parented(var, config[CONF_PI4IOE5V6408])
80
+
81
+ cg.add(var.set_pin(config[CONF_NUMBER]))
82
+ cg.add(var.set_inverted(config[CONF_INVERTED]))
83
+ cg.add(var.set_flags(pins.gpio_flags_expr(config[CONF_MODE])))
84
+ return var
@@ -0,0 +1,171 @@
1
+ #include "pi4ioe5v6408.h"
2
+ #include "esphome/core/log.h"
3
+
4
+ namespace esphome {
5
+ namespace pi4ioe5v6408 {
6
+
7
+ static const uint8_t PI4IOE5V6408_REGISTER_DEVICE_ID = 0x01;
8
+ static const uint8_t PI4IOE5V6408_REGISTER_IO_DIR = 0x03;
9
+ static const uint8_t PI4IOE5V6408_REGISTER_OUT_SET = 0x05;
10
+ static const uint8_t PI4IOE5V6408_REGISTER_OUT_HIGH_IMPEDENCE = 0x07;
11
+ static const uint8_t PI4IOE5V6408_REGISTER_IN_DEFAULT_STATE = 0x09;
12
+ static const uint8_t PI4IOE5V6408_REGISTER_PULL_ENABLE = 0x0B;
13
+ static const uint8_t PI4IOE5V6408_REGISTER_PULL_SELECT = 0x0D;
14
+ static const uint8_t PI4IOE5V6408_REGISTER_IN_STATE = 0x0F;
15
+ static const uint8_t PI4IOE5V6408_REGISTER_INTERRUPT_ENABLE_MASK = 0x11;
16
+ static const uint8_t PI4IOE5V6408_REGISTER_INTERRUPT_STATUS = 0x13;
17
+
18
+ static const char *const TAG = "pi4ioe5v6408";
19
+
20
+ void PI4IOE5V6408Component::setup() {
21
+ ESP_LOGCONFIG(TAG, "Running setup");
22
+ if (this->reset_) {
23
+ this->reg(PI4IOE5V6408_REGISTER_DEVICE_ID) |= 0b00000001;
24
+ this->reg(PI4IOE5V6408_REGISTER_OUT_HIGH_IMPEDENCE) = 0b00000000;
25
+ } else {
26
+ if (!this->read_gpio_modes_()) {
27
+ this->mark_failed();
28
+ ESP_LOGE(TAG, "Failed to read GPIO modes");
29
+ return;
30
+ }
31
+ if (!this->read_gpio_outputs_()) {
32
+ this->mark_failed();
33
+ ESP_LOGE(TAG, "Failed to read GPIO outputs");
34
+ return;
35
+ }
36
+ }
37
+ }
38
+ void PI4IOE5V6408Component::dump_config() {
39
+ ESP_LOGCONFIG(TAG, "PI4IOE5V6408:");
40
+ LOG_I2C_DEVICE(this)
41
+ if (this->is_failed()) {
42
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
43
+ }
44
+ }
45
+ void PI4IOE5V6408Component::pin_mode(uint8_t pin, gpio::Flags flags) {
46
+ if (flags & gpio::FLAG_OUTPUT) {
47
+ // Set mode mask bit
48
+ this->mode_mask_ |= 1 << pin;
49
+ } else if (flags & gpio::FLAG_INPUT) {
50
+ // Clear mode mask bit
51
+ this->mode_mask_ &= ~(1 << pin);
52
+ if (flags & gpio::FLAG_PULLUP) {
53
+ this->pull_up_down_mask_ |= 1 << pin;
54
+ this->pull_enable_mask_ |= 1 << pin;
55
+ } else if (flags & gpio::FLAG_PULLDOWN) {
56
+ this->pull_up_down_mask_ &= ~(1 << pin);
57
+ this->pull_enable_mask_ |= 1 << pin;
58
+ }
59
+ }
60
+ // Write GPIO to enable input mode
61
+ this->write_gpio_modes_();
62
+ }
63
+
64
+ void PI4IOE5V6408Component::loop() { this->reset_pin_cache_(); }
65
+
66
+ bool PI4IOE5V6408Component::read_gpio_outputs_() {
67
+ if (this->is_failed())
68
+ return false;
69
+
70
+ uint8_t data;
71
+ if (!this->read_byte(PI4IOE5V6408_REGISTER_OUT_SET, &data)) {
72
+ this->status_set_warning("Failed to read output register");
73
+ return false;
74
+ }
75
+ this->output_mask_ = data;
76
+ this->status_clear_warning();
77
+ return true;
78
+ }
79
+
80
+ bool PI4IOE5V6408Component::read_gpio_modes_() {
81
+ if (this->is_failed())
82
+ return false;
83
+
84
+ uint8_t data;
85
+ if (!this->read_byte(PI4IOE5V6408_REGISTER_IO_DIR, &data)) {
86
+ this->status_set_warning("Failed to read GPIO modes");
87
+ return false;
88
+ }
89
+ #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
90
+ ESP_LOGV(TAG, "Read GPIO modes: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(data));
91
+ #endif
92
+ this->mode_mask_ = data;
93
+ this->status_clear_warning();
94
+ return true;
95
+ }
96
+
97
+ bool PI4IOE5V6408Component::digital_read_hw(uint8_t pin) {
98
+ if (this->is_failed())
99
+ return false;
100
+
101
+ uint8_t data;
102
+ if (!this->read_byte(PI4IOE5V6408_REGISTER_IN_STATE, &data)) {
103
+ this->status_set_warning("Failed to read GPIO state");
104
+ return false;
105
+ }
106
+ this->input_mask_ = data;
107
+ this->status_clear_warning();
108
+ return true;
109
+ }
110
+
111
+ void PI4IOE5V6408Component::digital_write_hw(uint8_t pin, bool value) {
112
+ if (this->is_failed())
113
+ return;
114
+
115
+ if (value) {
116
+ this->output_mask_ |= (1 << pin);
117
+ } else {
118
+ this->output_mask_ &= ~(1 << pin);
119
+ }
120
+ if (!this->write_byte(PI4IOE5V6408_REGISTER_OUT_SET, this->output_mask_)) {
121
+ this->status_set_warning("Failed to write output register");
122
+ return;
123
+ }
124
+ #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
125
+ ESP_LOGV(TAG, "Wrote GPIO output: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(this->output_mask_));
126
+ #endif
127
+ this->status_clear_warning();
128
+ }
129
+
130
+ bool PI4IOE5V6408Component::write_gpio_modes_() {
131
+ if (this->is_failed())
132
+ return false;
133
+
134
+ if (!this->write_byte(PI4IOE5V6408_REGISTER_IO_DIR, this->mode_mask_)) {
135
+ this->status_set_warning("Failed to write GPIO modes");
136
+ return false;
137
+ }
138
+ if (!this->write_byte(PI4IOE5V6408_REGISTER_PULL_SELECT, this->pull_up_down_mask_)) {
139
+ this->status_set_warning("Failed to write GPIO pullup/pulldown");
140
+ return false;
141
+ }
142
+ if (!this->write_byte(PI4IOE5V6408_REGISTER_PULL_ENABLE, this->pull_enable_mask_)) {
143
+ this->status_set_warning("Failed to write GPIO pull enable");
144
+ return false;
145
+ }
146
+ #if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
147
+ ESP_LOGV(TAG,
148
+ "Wrote GPIO modes: 0b" BYTE_TO_BINARY_PATTERN "\n"
149
+ "Wrote GPIO pullup/pulldown: 0b" BYTE_TO_BINARY_PATTERN "\n"
150
+ "Wrote GPIO pull enable: 0b" BYTE_TO_BINARY_PATTERN,
151
+ BYTE_TO_BINARY(this->mode_mask_), BYTE_TO_BINARY(this->pull_up_down_mask_),
152
+ BYTE_TO_BINARY(this->pull_enable_mask_));
153
+ #endif
154
+ this->status_clear_warning();
155
+ return true;
156
+ }
157
+
158
+ bool PI4IOE5V6408Component::digital_read_cache(uint8_t pin) { return (this->input_mask_ & (1 << pin)); }
159
+
160
+ float PI4IOE5V6408Component::get_setup_priority() const { return setup_priority::IO; }
161
+
162
+ void PI4IOE5V6408GPIOPin::setup() { this->pin_mode(this->flags_); }
163
+ void PI4IOE5V6408GPIOPin::pin_mode(gpio::Flags flags) { this->parent_->pin_mode(this->pin_, flags); }
164
+ bool PI4IOE5V6408GPIOPin::digital_read() { return this->parent_->digital_read(this->pin_) != this->inverted_; }
165
+ void PI4IOE5V6408GPIOPin::digital_write(bool value) {
166
+ this->parent_->digital_write(this->pin_, value != this->inverted_);
167
+ }
168
+ std::string PI4IOE5V6408GPIOPin::dump_summary() const { return str_sprintf("%u via PI4IOE5V6408", this->pin_); }
169
+
170
+ } // namespace pi4ioe5v6408
171
+ } // namespace esphome
@@ -0,0 +1,70 @@
1
+ #pragma once
2
+
3
+ #include "esphome/components/gpio_expander/cached_gpio.h"
4
+ #include "esphome/components/i2c/i2c.h"
5
+ #include "esphome/core/component.h"
6
+ #include "esphome/core/hal.h"
7
+
8
+ namespace esphome {
9
+ namespace pi4ioe5v6408 {
10
+ class PI4IOE5V6408Component : public Component,
11
+ public i2c::I2CDevice,
12
+ public gpio_expander::CachedGpioExpander<uint8_t, 8> {
13
+ public:
14
+ PI4IOE5V6408Component() = default;
15
+
16
+ void setup() override;
17
+ void pin_mode(uint8_t pin, gpio::Flags flags);
18
+
19
+ float get_setup_priority() const override;
20
+ void dump_config() override;
21
+ void loop() override;
22
+
23
+ /// Indicate if the component should reset the state during setup
24
+ void set_reset(bool reset) { this->reset_ = reset; }
25
+
26
+ protected:
27
+ bool digital_read_hw(uint8_t pin) override;
28
+ bool digital_read_cache(uint8_t pin) override;
29
+ void digital_write_hw(uint8_t pin, bool value) override;
30
+
31
+ /// Mask for the pin mode - 1 means output, 0 means input
32
+ uint8_t mode_mask_{0x00};
33
+ /// The mask to write as output state - 1 means HIGH, 0 means LOW
34
+ uint8_t output_mask_{0x00};
35
+ /// The state read in digital_read_hw - 1 means HIGH, 0 means LOW
36
+ uint8_t input_mask_{0x00};
37
+ /// The mask to write as input buffer state - 1 means enabled, 0 means disabled
38
+ uint8_t pull_enable_mask_{0x00};
39
+ /// The mask to write as pullup state - 1 means pullup, 0 means pulldown
40
+ uint8_t pull_up_down_mask_{0x00};
41
+
42
+ bool reset_{true};
43
+
44
+ bool read_gpio_modes_();
45
+ bool write_gpio_modes_();
46
+ bool read_gpio_outputs_();
47
+ };
48
+
49
+ class PI4IOE5V6408GPIOPin : public GPIOPin, public Parented<PI4IOE5V6408Component> {
50
+ public:
51
+ void setup() override;
52
+ void pin_mode(gpio::Flags flags) override;
53
+ bool digital_read() override;
54
+ void digital_write(bool value) override;
55
+ std::string dump_summary() const override;
56
+
57
+ void set_pin(uint8_t pin) { this->pin_ = pin; }
58
+ void set_inverted(bool inverted) { this->inverted_ = inverted; }
59
+ void set_flags(gpio::Flags flags) { this->flags_ = flags; }
60
+
61
+ gpio::Flags get_flags() const override { return this->flags_; }
62
+
63
+ protected:
64
+ uint8_t pin_;
65
+ bool inverted_;
66
+ gpio::Flags flags_;
67
+ };
68
+
69
+ } // namespace pi4ioe5v6408
70
+ } // namespace esphome
@@ -32,7 +32,6 @@ class PMSA003IComponent : public PollingComponent, public i2c::I2CDevice {
32
32
  void setup() override;
33
33
  void dump_config() override;
34
34
  void update() override;
35
- float get_setup_priority() const override { return setup_priority::DATA; }
36
35
 
37
36
  void set_standard_units(bool standard_units) { this->standard_units_ = standard_units; }
38
37
 
@@ -31,7 +31,6 @@ enum PMSX003State {
31
31
  class PMSX003Component : public uart::UARTDevice, public Component {
32
32
  public:
33
33
  PMSX003Component() = default;
34
- float get_setup_priority() const override { return setup_priority::DATA; }
35
34
  void dump_config() override;
36
35
  void loop() override;
37
36
 
@@ -584,7 +584,7 @@ void PN7150::nci_fsm_transition_() {
584
584
  } else {
585
585
  this->nci_fsm_set_state_(NCIState::NFCC_INIT);
586
586
  }
587
- // fall through
587
+ [[fallthrough]];
588
588
 
589
589
  case NCIState::NFCC_INIT:
590
590
  if (this->init_core_() != nfc::STATUS_OK) {
@@ -594,7 +594,7 @@ void PN7150::nci_fsm_transition_() {
594
594
  } else {
595
595
  this->nci_fsm_set_state_(NCIState::NFCC_CONFIG);
596
596
  }
597
- // fall through
597
+ [[fallthrough]];
598
598
 
599
599
  case NCIState::NFCC_CONFIG:
600
600
  if (this->send_init_config_() != nfc::STATUS_OK) {
@@ -605,7 +605,7 @@ void PN7150::nci_fsm_transition_() {
605
605
  this->config_refresh_pending_ = false;
606
606
  this->nci_fsm_set_state_(NCIState::NFCC_SET_DISCOVER_MAP);
607
607
  }
608
- // fall through
608
+ [[fallthrough]];
609
609
 
610
610
  case NCIState::NFCC_SET_DISCOVER_MAP:
611
611
  if (this->set_discover_map_() != nfc::STATUS_OK) {
@@ -615,7 +615,7 @@ void PN7150::nci_fsm_transition_() {
615
615
  } else {
616
616
  this->nci_fsm_set_state_(NCIState::NFCC_SET_LISTEN_MODE_ROUTING);
617
617
  }
618
- // fall through
618
+ [[fallthrough]];
619
619
 
620
620
  case NCIState::NFCC_SET_LISTEN_MODE_ROUTING:
621
621
  if (this->set_listen_mode_routing_() != nfc::STATUS_OK) {
@@ -625,7 +625,7 @@ void PN7150::nci_fsm_transition_() {
625
625
  } else {
626
626
  this->nci_fsm_set_state_(NCIState::RFST_IDLE);
627
627
  }
628
- // fall through
628
+ [[fallthrough]];
629
629
 
630
630
  case NCIState::RFST_IDLE:
631
631
  if (this->nci_state_error_ == NCIState::RFST_DISCOVERY) {
@@ -650,14 +650,14 @@ void PN7150::nci_fsm_transition_() {
650
650
 
651
651
  case NCIState::RFST_W4_HOST_SELECT:
652
652
  select_endpoint_();
653
- // fall through
653
+ [[fallthrough]];
654
654
 
655
655
  // All cases below are waiting for NOTIFICATION messages
656
656
  case NCIState::RFST_DISCOVERY:
657
657
  if (this->config_refresh_pending_) {
658
658
  this->refresh_core_config_();
659
659
  }
660
- // fall through
660
+ [[fallthrough]];
661
661
 
662
662
  case NCIState::RFST_LISTEN_ACTIVE:
663
663
  case NCIState::RFST_LISTEN_SLEEP:
@@ -146,7 +146,6 @@ class PN7150 : public nfc::Nfcc, public Component {
146
146
  public:
147
147
  void setup() override;
148
148
  void dump_config() override;
149
- float get_setup_priority() const override { return setup_priority::DATA; }
150
149
  void loop() override;
151
150
 
152
151
  void set_irq_pin(GPIOPin *irq_pin) { this->irq_pin_ = irq_pin; }
@@ -609,7 +609,7 @@ void PN7160::nci_fsm_transition_() {
609
609
  } else {
610
610
  this->nci_fsm_set_state_(NCIState::NFCC_INIT);
611
611
  }
612
- // fall through
612
+ [[fallthrough]];
613
613
 
614
614
  case NCIState::NFCC_INIT:
615
615
  if (this->init_core_() != nfc::STATUS_OK) {
@@ -619,7 +619,7 @@ void PN7160::nci_fsm_transition_() {
619
619
  } else {
620
620
  this->nci_fsm_set_state_(NCIState::NFCC_CONFIG);
621
621
  }
622
- // fall through
622
+ [[fallthrough]];
623
623
 
624
624
  case NCIState::NFCC_CONFIG:
625
625
  if (this->send_init_config_() != nfc::STATUS_OK) {
@@ -630,7 +630,7 @@ void PN7160::nci_fsm_transition_() {
630
630
  this->config_refresh_pending_ = false;
631
631
  this->nci_fsm_set_state_(NCIState::NFCC_SET_DISCOVER_MAP);
632
632
  }
633
- // fall through
633
+ [[fallthrough]];
634
634
 
635
635
  case NCIState::NFCC_SET_DISCOVER_MAP:
636
636
  if (this->set_discover_map_() != nfc::STATUS_OK) {
@@ -640,7 +640,7 @@ void PN7160::nci_fsm_transition_() {
640
640
  } else {
641
641
  this->nci_fsm_set_state_(NCIState::NFCC_SET_LISTEN_MODE_ROUTING);
642
642
  }
643
- // fall through
643
+ [[fallthrough]];
644
644
 
645
645
  case NCIState::NFCC_SET_LISTEN_MODE_ROUTING:
646
646
  if (this->set_listen_mode_routing_() != nfc::STATUS_OK) {
@@ -650,7 +650,7 @@ void PN7160::nci_fsm_transition_() {
650
650
  } else {
651
651
  this->nci_fsm_set_state_(NCIState::RFST_IDLE);
652
652
  }
653
- // fall through
653
+ [[fallthrough]];
654
654
 
655
655
  case NCIState::RFST_IDLE:
656
656
  if (this->nci_state_error_ == NCIState::RFST_DISCOVERY) {
@@ -675,14 +675,14 @@ void PN7160::nci_fsm_transition_() {
675
675
 
676
676
  case NCIState::RFST_W4_HOST_SELECT:
677
677
  select_endpoint_();
678
- // fall through
678
+ [[fallthrough]];
679
679
 
680
680
  // All cases below are waiting for NOTIFICATION messages
681
681
  case NCIState::RFST_DISCOVERY:
682
682
  if (this->config_refresh_pending_) {
683
683
  this->refresh_core_config_();
684
684
  }
685
- // fall through
685
+ [[fallthrough]];
686
686
 
687
687
  case NCIState::RFST_LISTEN_ACTIVE:
688
688
  case NCIState::RFST_LISTEN_SLEEP:
@@ -161,7 +161,6 @@ class PN7160 : public nfc::Nfcc, public Component {
161
161
  public:
162
162
  void setup() override;
163
163
  void dump_config() override;
164
- float get_setup_priority() const override { return setup_priority::DATA; }
165
164
  void loop() override;
166
165
 
167
166
  void set_dwl_req_pin(GPIOPin *dwl_req_pin) { this->dwl_req_pin_ = dwl_req_pin; }
@@ -12,6 +12,8 @@ class IntervalSyncer : public Component {
12
12
  void setup() override {
13
13
  if (this->write_interval_ != 0) {
14
14
  set_interval(this->write_interval_, []() { global_preferences->sync(); });
15
+ // When using interval-based syncing, we don't need the loop
16
+ this->disable_loop();
15
17
  }
16
18
  }
17
19
  void loop() override {
@@ -40,7 +40,7 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
40
40
  */
41
41
  void add_label_name(EntityBase *obj, const std::string &value) { relabel_map_name_.insert({obj, value}); }
42
42
 
43
- bool canHandle(AsyncWebServerRequest *request) override {
43
+ bool canHandle(AsyncWebServerRequest *request) const override {
44
44
  if (request->method() == HTTP_GET) {
45
45
  if (request->url() == "/metrics")
46
46
  return true;
@@ -2,9 +2,7 @@
2
2
  #ifdef USE_ESP32
3
3
  #include "psram.h"
4
4
  #include <esp_idf_version.h>
5
- #if defined(USE_ESP_IDF) && ESP_IDF_VERSION_MAJOR >= 5
6
5
  #include <esp_psram.h>
7
- #endif // USE_ESP_IDF
8
6
 
9
7
  #include "esphome/core/log.h"
10
8
 
@@ -16,7 +14,6 @@ static const char *const TAG = "psram";
16
14
 
17
15
  void PsramComponent::dump_config() {
18
16
  ESP_LOGCONFIG(TAG, "PSRAM:");
19
- #if defined(USE_ESP_IDF) && ESP_IDF_VERSION_MAJOR >= 5
20
17
  bool available = esp_psram_is_initialized();
21
18
 
22
19
  ESP_LOGCONFIG(TAG, " Available: %s", YESNO(available));
@@ -26,23 +23,6 @@ void PsramComponent::dump_config() {
26
23
  ESP_LOGCONFIG(TAG, " ECC enabled: YES");
27
24
  #endif
28
25
  }
29
- #else
30
- // Technically this can be false if the PSRAM is full, but heap_caps_get_total_size() isn't always available, and it's
31
- // very unlikely for the PSRAM to be full.
32
- bool available = heap_caps_get_free_size(MALLOC_CAP_SPIRAM) > 0;
33
- ESP_LOGCONFIG(TAG, " Available: %s", YESNO(available));
34
-
35
- if (available) {
36
- const size_t psram_total_size_bytes = heap_caps_get_total_size(MALLOC_CAP_SPIRAM);
37
- const float psram_total_size_kb = psram_total_size_bytes / 1024.0f;
38
-
39
- if (abs(std::round(psram_total_size_kb) - psram_total_size_kb) < 0.05f) {
40
- ESP_LOGCONFIG(TAG, " Size: %.0f KB", psram_total_size_kb);
41
- } else {
42
- ESP_LOGCONFIG(TAG, " Size: %zu bytes", psram_total_size_bytes);
43
- }
44
- }
45
- #endif // USE_ESP_IDF
46
26
  }
47
27
 
48
28
  } // namespace psram
@@ -76,7 +76,6 @@ class PulseCounterSensor : public sensor::Sensor, public PollingComponent {
76
76
  /// Unit of measurement is "pulses/min".
77
77
  void setup() override;
78
78
  void update() override;
79
- float get_setup_priority() const override { return setup_priority::DATA; }
80
79
  void dump_config() override;
81
80
 
82
81
  protected: