esphome 2025.6.2__py3-none-any.whl → 2025.7.0b1__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 (601) 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 +42 -20
  22. esphome/components/api/api_connection.cpp +318 -391
  23. esphome/components/api/api_connection.h +206 -126
  24. esphome/components/api/api_frame_helper.cpp +89 -124
  25. esphome/components/api/api_frame_helper.h +57 -45
  26. esphome/components/api/api_pb2.cpp +414 -4350
  27. esphome/components/api/api_pb2.h +287 -198
  28. esphome/components/api/api_pb2_dump.cpp +4333 -0
  29. esphome/components/api/api_pb2_service.cpp +180 -425
  30. esphome/components/api/api_pb2_service.h +7 -6
  31. esphome/components/api/api_pb2_size.h +2 -4
  32. esphome/components/api/api_server.cpp +138 -167
  33. esphome/components/api/api_server.h +66 -12
  34. esphome/components/api/client.py +10 -4
  35. esphome/components/api/list_entities.cpp +36 -105
  36. esphome/components/api/list_entities.h +31 -23
  37. esphome/components/api/proto.h +26 -3
  38. esphome/components/api/subscribe_state.cpp +23 -29
  39. esphome/components/api/subscribe_state.h +26 -19
  40. esphome/components/as5600/as5600.h +0 -1
  41. esphome/components/async_tcp/__init__.py +14 -5
  42. esphome/components/atc_mithermometer/atc_mithermometer.h +0 -1
  43. esphome/components/atm90e32/atm90e32.cpp +2 -1
  44. esphome/components/audio/audio_decoder.cpp +1 -1
  45. esphome/components/audio/audio_transfer_buffer.cpp +2 -2
  46. esphome/components/b_parasite/b_parasite.h +0 -1
  47. esphome/components/bedjet/bedjet_hub.cpp +5 -1
  48. esphome/components/bedjet/climate/bedjet_climate.cpp +5 -1
  49. esphome/components/beken_spi_led_strip/led_strip.cpp +4 -2
  50. esphome/components/bh1750/bh1750.cpp +5 -5
  51. esphome/components/binary_sensor/__init__.py +82 -5
  52. esphome/components/binary_sensor/automation.h +19 -1
  53. esphome/components/binary_sensor/binary_sensor.cpp +12 -30
  54. esphome/components/binary_sensor/binary_sensor.h +11 -25
  55. esphome/components/binary_sensor/filter.cpp +29 -24
  56. esphome/components/binary_sensor/filter.h +20 -10
  57. esphome/components/ble_client/output/ble_binary_output.h +0 -1
  58. esphome/components/ble_client/sensor/ble_rssi_sensor.cpp +5 -1
  59. esphome/components/ble_client/sensor/ble_rssi_sensor.h +0 -1
  60. esphome/components/ble_client/sensor/ble_sensor.cpp +5 -1
  61. esphome/components/ble_client/sensor/ble_sensor.h +0 -1
  62. esphome/components/ble_client/switch/ble_switch.h +0 -1
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +5 -1
  64. esphome/components/ble_client/text_sensor/ble_text_sensor.h +0 -1
  65. esphome/components/ble_presence/ble_presence_device.h +0 -1
  66. esphome/components/ble_rssi/ble_rssi_sensor.h +0 -1
  67. esphome/components/ble_scanner/ble_scanner.h +0 -1
  68. esphome/components/bluetooth_proxy/bluetooth_connection.h +9 -2
  69. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +16 -6
  70. esphome/components/bluetooth_proxy/bluetooth_proxy.h +8 -2
  71. esphome/components/bme680/sensor.py +1 -1
  72. esphome/components/bmp581/bmp581.h +0 -2
  73. esphome/components/button/__init__.py +5 -2
  74. esphome/components/camera/__init__.py +1 -0
  75. esphome/components/camera/camera.cpp +22 -0
  76. esphome/components/camera/camera.h +80 -0
  77. esphome/components/canbus/__init__.py +1 -0
  78. esphome/components/cap1188/cap1188.h +0 -1
  79. esphome/components/captive_portal/__init__.py +12 -2
  80. esphome/components/captive_portal/captive_portal.cpp +12 -2
  81. esphome/components/captive_portal/captive_portal.h +5 -2
  82. esphome/components/ccs811/ccs811.h +0 -2
  83. esphome/components/climate/__init__.py +5 -2
  84. esphome/components/cm1106/sensor.py +2 -2
  85. esphome/components/const/__init__.py +2 -0
  86. esphome/components/copy/binary_sensor/copy_binary_sensor.h +0 -1
  87. esphome/components/copy/button/copy_button.h +0 -1
  88. esphome/components/copy/cover/copy_cover.h +0 -1
  89. esphome/components/copy/fan/copy_fan.h +0 -1
  90. esphome/components/copy/lock/copy_lock.h +0 -1
  91. esphome/components/copy/number/copy_number.h +0 -1
  92. esphome/components/copy/select/copy_select.h +0 -1
  93. esphome/components/copy/sensor/copy_sensor.h +0 -1
  94. esphome/components/copy/switch/copy_switch.h +0 -1
  95. esphome/components/copy/text/copy_text.h +0 -1
  96. esphome/components/copy/text_sensor/copy_text_sensor.h +0 -1
  97. esphome/components/cover/__init__.py +5 -2
  98. esphome/components/cs5460a/cs5460a.h +0 -1
  99. esphome/components/datetime/__init__.py +4 -2
  100. esphome/components/debug/__init__.py +20 -0
  101. esphome/components/deep_sleep/__init__.py +43 -9
  102. esphome/components/demo/__init__.py +2 -2
  103. esphome/components/display/display.cpp +4 -3
  104. esphome/components/display/display.h +0 -2
  105. esphome/components/display/display_buffer.cpp +1 -1
  106. esphome/components/ds2484/__init__.py +1 -0
  107. esphome/components/ds2484/ds2484.cpp +209 -0
  108. esphome/components/ds2484/ds2484.h +43 -0
  109. esphome/components/ds2484/one_wire.py +37 -0
  110. esphome/components/duty_time/duty_time_sensor.h +0 -1
  111. esphome/components/ens160_base/ens160_base.h +0 -1
  112. esphome/components/es7210/es7210.h +0 -1
  113. esphome/components/es7243e/es7243e.h +0 -1
  114. esphome/components/es8156/es8156.h +0 -1
  115. esphome/components/es8311/es8311.h +0 -1
  116. esphome/components/es8388/es8388.h +0 -1
  117. esphome/components/esp32/__init__.py +102 -135
  118. esphome/components/esp32/core.cpp +0 -4
  119. esphome/components/esp32/gpio.h +1 -1
  120. esphome/components/esp32/helpers.cpp +69 -0
  121. esphome/components/esp32_ble/ble.cpp +5 -6
  122. esphome/components/esp32_ble/ble.h +29 -14
  123. esphome/components/esp32_ble/ble_event.h +6 -6
  124. esphome/components/esp32_ble_client/ble_client_base.cpp +21 -6
  125. esphome/components/esp32_ble_client/ble_client_base.h +24 -9
  126. esphome/components/esp32_ble_tracker/__init__.py +2 -8
  127. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +5 -5
  128. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +11 -7
  129. esphome/components/esp32_camera/__init__.py +111 -97
  130. esphome/components/esp32_camera/esp32_camera.cpp +41 -31
  131. esphome/components/esp32_camera/esp32_camera.h +35 -30
  132. esphome/components/esp32_camera_web_server/__init__.py +2 -1
  133. esphome/components/esp32_camera_web_server/camera_web_server.cpp +8 -8
  134. esphome/components/esp32_camera_web_server/camera_web_server.h +3 -3
  135. esphome/components/esp32_hall/sensor.py +2 -21
  136. esphome/components/esp32_hosted/__init__.py +101 -0
  137. esphome/components/esp32_hosted/esp32_hosted.py.script +12 -0
  138. esphome/components/esp32_improv/esp32_improv_component.cpp +3 -0
  139. esphome/components/esp32_rmt/__init__.py +0 -58
  140. esphome/components/esp32_rmt_led_strip/led_strip.cpp +77 -63
  141. esphome/components/esp32_rmt_led_strip/led_strip.h +11 -17
  142. esphome/components/esp32_rmt_led_strip/light.py +14 -76
  143. esphome/components/esp32_touch/esp32_touch.h +174 -28
  144. esphome/components/esp32_touch/esp32_touch_common.cpp +162 -0
  145. esphome/components/esp32_touch/esp32_touch_v1.cpp +238 -0
  146. esphome/components/esp32_touch/esp32_touch_v2.cpp +397 -0
  147. esphome/components/esp8266/__init__.py +1 -0
  148. esphome/components/esp8266/gpio.cpp +10 -10
  149. esphome/components/esp8266/helpers.cpp +31 -0
  150. esphome/components/esphome/ota/__init__.py +1 -0
  151. esphome/components/esphome/ota/ota_esphome.cpp +24 -19
  152. esphome/components/ethernet/__init__.py +42 -23
  153. esphome/components/ethernet/esp_eth_phy_jl1101.c +0 -16
  154. esphome/components/ethernet/ethernet_component.cpp +69 -29
  155. esphome/components/ethernet/ethernet_component.h +18 -10
  156. esphome/components/event/__init__.py +5 -2
  157. esphome/components/ezo/ezo.h +0 -1
  158. esphome/components/ezo_pmp/ezo_pmp.h +0 -1
  159. esphome/components/fan/__init__.py +5 -2
  160. esphome/components/feedback/feedback_cover.h +0 -1
  161. esphome/components/font/__init__.py +92 -82
  162. esphome/components/font/font.cpp +9 -2
  163. esphome/components/font/font.h +20 -5
  164. esphome/components/fs3000/fs3000.h +0 -1
  165. esphome/components/gcja5/gcja5.h +0 -1
  166. esphome/components/gl_r01_i2c/__init__.py +0 -0
  167. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +68 -0
  168. esphome/components/gl_r01_i2c/gl_r01_i2c.h +22 -0
  169. esphome/components/gl_r01_i2c/sensor.py +36 -0
  170. esphome/components/gp8403/gp8403.h +0 -1
  171. esphome/components/gpio/binary_sensor/__init__.py +17 -0
  172. esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp +77 -3
  173. esphome/components/gpio/binary_sensor/gpio_binary_sensor.h +40 -0
  174. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.h +0 -2
  175. esphome/components/he60r/he60r.h +0 -1
  176. esphome/components/heatpumpir/climate.py +2 -1
  177. esphome/components/heatpumpir/heatpumpir.cpp +1 -0
  178. esphome/components/heatpumpir/heatpumpir.h +1 -0
  179. esphome/components/honeywellabp2_i2c/honeywellabp2.h +0 -1
  180. esphome/components/host/__init__.py +2 -1
  181. esphome/components/host/helpers.cpp +57 -0
  182. esphome/components/http_request/__init__.py +19 -1
  183. esphome/components/http_request/http_request.h +1 -1
  184. esphome/components/http_request/http_request_arduino.cpp +0 -1
  185. esphome/components/http_request/http_request_arduino.h +1 -0
  186. esphome/components/http_request/http_request_idf.cpp +0 -1
  187. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  188. esphome/components/http_request/update/http_request_update.cpp +28 -9
  189. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +3 -9
  190. esphome/components/hydreon_rgxx/sensor.py +1 -1
  191. esphome/components/i2c/__init__.py +23 -11
  192. esphome/components/i2c/i2c_bus.h +8 -1
  193. esphome/components/i2c/i2c_bus_arduino.cpp +4 -3
  194. esphome/components/i2c/i2c_bus_arduino.h +6 -3
  195. esphome/components/i2c/i2c_bus_esp_idf.h +5 -3
  196. esphome/components/i2c_device/i2c_device.h +0 -1
  197. esphome/components/i2s_audio/__init__.py +2 -10
  198. esphome/components/i2s_audio/i2s_audio.cpp +1 -5
  199. esphome/components/i2s_audio/media_player/__init__.py +2 -2
  200. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +2 -2
  201. esphome/components/iaqcore/iaqcore.h +0 -2
  202. esphome/components/image/__init__.py +123 -24
  203. esphome/components/improv_serial/improv_serial_component.cpp +0 -4
  204. esphome/components/ina219/ina219.cpp +7 -0
  205. esphome/components/ina219/ina219.h +1 -0
  206. esphome/components/ina260/ina260.h +0 -2
  207. esphome/components/inkbird_ibsth1_mini/inkbird_ibsth1_mini.h +0 -1
  208. esphome/components/inkplate6/display.py +15 -0
  209. esphome/components/inkplate6/inkplate.cpp +2 -2
  210. esphome/components/integration/integration_sensor.h +0 -1
  211. esphome/components/internal_temperature/internal_temperature.cpp +8 -27
  212. esphome/components/internal_temperature/sensor.py +0 -26
  213. esphome/components/interval/interval.h +0 -2
  214. esphome/components/ld2410/button/__init__.py +3 -3
  215. esphome/components/ld2410/button/factory_reset_button.cpp +9 -0
  216. esphome/components/ld2410/button/{reset_button.h → factory_reset_button.h} +2 -2
  217. esphome/components/ld2410/ld2410.cpp +430 -261
  218. esphome/components/ld2410/ld2410.h +44 -146
  219. esphome/components/ld2410/number/__init__.py +2 -2
  220. esphome/components/ld2410/sensor.py +1 -1
  221. esphome/components/ld2410/switch/__init__.py +1 -1
  222. esphome/components/ld2420/ld2420.cpp +196 -100
  223. esphome/components/ld2420/ld2420.h +46 -118
  224. esphome/components/ld2420/number/__init__.py +2 -2
  225. esphome/components/ld2420/sensor/__init__.py +6 -2
  226. esphome/components/ld2420/sensor/ld2420_sensor.h +1 -1
  227. esphome/components/ld2450/button/__init__.py +3 -3
  228. esphome/components/ld2450/button/factory_reset_button.cpp +9 -0
  229. esphome/components/ld2450/button/{reset_button.h → factory_reset_button.h} +2 -2
  230. esphome/components/ld2450/ld2450.cpp +384 -232
  231. esphome/components/ld2450/ld2450.h +60 -69
  232. esphome/components/ld2450/switch/__init__.py +1 -1
  233. esphome/components/ledc/ledc_output.cpp +1 -63
  234. esphome/components/libretiny/__init__.py +4 -3
  235. esphome/components/libretiny/const.py +5 -0
  236. esphome/components/libretiny/generate_components.py +1 -0
  237. esphome/components/libretiny/helpers.cpp +35 -0
  238. esphome/components/libretiny/lt_component.cpp +5 -3
  239. esphome/components/light/__init__.py +4 -2
  240. esphome/components/light/addressable_light.h +3 -3
  241. esphome/components/light/light_call.cpp +180 -243
  242. esphome/components/light/light_call.h +72 -20
  243. esphome/components/light/light_color_values.h +14 -14
  244. esphome/components/light/light_state.h +15 -13
  245. esphome/components/light/transformers.h +2 -2
  246. esphome/components/ln882x/__init__.py +52 -0
  247. esphome/components/ln882x/boards.py +285 -0
  248. esphome/components/lock/__init__.py +5 -2
  249. esphome/components/logger/__init__.py +40 -3
  250. esphome/components/logger/logger.cpp +47 -12
  251. esphome/components/logger/logger.h +80 -49
  252. esphome/components/logger/logger_esp32.cpp +3 -3
  253. esphome/components/lps22/__init__.py +0 -0
  254. esphome/components/lps22/lps22.cpp +75 -0
  255. esphome/components/lps22/lps22.h +27 -0
  256. esphome/components/lps22/sensor.py +58 -0
  257. esphome/components/ltr390/ltr390.h +0 -1
  258. esphome/components/ltr501/ltr501.h +0 -1
  259. esphome/components/ltr_als_ps/ltr_als_ps.h +0 -1
  260. esphome/components/lvgl/__init__.py +1 -1
  261. esphome/components/lvgl/schemas.py +66 -6
  262. esphome/components/lvgl/styles.py +24 -16
  263. esphome/components/lvgl/widgets/__init__.py +12 -2
  264. esphome/components/lvgl/widgets/lv_bar.py +40 -19
  265. esphome/components/m5stack_8angle/light/m5stack_8angle_light.cpp +1 -1
  266. esphome/components/max9611/max9611.h +0 -1
  267. esphome/components/mcp23016/__init__.py +1 -1
  268. esphome/components/mcp23xxx_base/__init__.py +1 -1
  269. esphome/components/mcp4461/__init__.py +1 -1
  270. esphome/components/mcp4461/output/__init__.py +3 -2
  271. esphome/components/mcp9600/mcp9600.h +0 -2
  272. esphome/components/md5/md5.cpp +3 -3
  273. esphome/components/md5/md5.h +1 -6
  274. esphome/components/mdns/__init__.py +22 -11
  275. esphome/components/media_player/__init__.py +4 -3
  276. esphome/components/micro_wake_word/__init__.py +1 -5
  277. esphome/components/micro_wake_word/streaming_model.cpp +2 -2
  278. esphome/components/microphone/microphone.cpp +7 -9
  279. esphome/components/microphone/microphone.h +0 -2
  280. esphome/components/mipi_spi/display.py +1 -0
  281. esphome/components/mmc5603/mmc5603.cpp +1 -1
  282. esphome/components/modbus/modbus.cpp +33 -15
  283. esphome/components/modbus/modbus.h +9 -0
  284. esphome/components/modbus_controller/__init__.py +42 -10
  285. esphome/components/modbus_controller/modbus_controller.cpp +92 -11
  286. esphome/components/modbus_controller/modbus_controller.h +61 -7
  287. esphome/components/mopeka_pro_check/mopeka_pro_check.h +0 -1
  288. esphome/components/mopeka_std_check/mopeka_std_check.h +0 -1
  289. esphome/components/mpl3115a2/mpl3115a2.h +0 -2
  290. esphome/components/mqtt/__init__.py +16 -0
  291. esphome/components/mqtt/mqtt_backend.h +2 -1
  292. esphome/components/mqtt/mqtt_backend_esp32.cpp +126 -45
  293. esphome/components/mqtt/mqtt_backend_esp32.h +106 -4
  294. esphome/components/mqtt/mqtt_client.cpp +15 -9
  295. esphome/components/mqtt/mqtt_client.h +8 -3
  296. esphome/components/ms8607/ms8607.h +0 -1
  297. esphome/components/neopixelbus/light.py +4 -1
  298. esphome/components/neopixelbus/neopixelbus_light.h +1 -1
  299. esphome/components/network/__init__.py +4 -1
  300. esphome/components/network/ip_address.h +1 -0
  301. esphome/components/nextion/__init__.py +16 -0
  302. esphome/components/nextion/base_component.py +1 -0
  303. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +1 -1
  304. esphome/components/nextion/display.py +14 -4
  305. esphome/components/nextion/nextion.cpp +166 -101
  306. esphome/components/nextion/nextion.h +84 -53
  307. esphome/components/nextion/nextion_commands.cpp +11 -10
  308. esphome/components/nextion/nextion_component.cpp +28 -28
  309. esphome/components/nextion/nextion_component.h +53 -18
  310. esphome/components/nextion/nextion_component_base.h +3 -0
  311. esphome/components/nextion/nextion_upload.cpp +36 -0
  312. esphome/components/nextion/nextion_upload_arduino.cpp +10 -35
  313. esphome/components/nextion/nextion_upload_idf.cpp +9 -33
  314. esphome/components/nextion/sensor/nextion_sensor.cpp +1 -1
  315. esphome/components/nextion/switch/nextion_switch.cpp +1 -1
  316. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +1 -1
  317. esphome/components/nfc/nfc.cpp +3 -22
  318. esphome/components/nfc/nfc.h +3 -3
  319. esphome/components/number/__init__.py +5 -2
  320. esphome/components/online_image/__init__.py +5 -0
  321. esphome/components/online_image/online_image.cpp +6 -2
  322. esphome/components/online_image/online_image.h +4 -1
  323. esphome/components/opentherm/opentherm.cpp +7 -12
  324. esphome/components/openthread/__init__.py +47 -40
  325. esphome/components/openthread/const.py +1 -0
  326. esphome/components/openthread/openthread_esp.cpp +27 -5
  327. esphome/components/opt3001/__init__.py +0 -0
  328. esphome/components/opt3001/opt3001.cpp +122 -0
  329. esphome/components/opt3001/opt3001.h +27 -0
  330. esphome/components/opt3001/sensor.py +35 -0
  331. esphome/components/ota/__init__.py +17 -0
  332. esphome/components/ota/ota_backend.h +27 -1
  333. esphome/components/ota/ota_backend_arduino_esp32.cpp +12 -2
  334. esphome/components/ota/ota_backend_arduino_esp32.h +3 -0
  335. esphome/components/ota/ota_backend_arduino_esp8266.cpp +18 -4
  336. esphome/components/ota/ota_backend_arduino_esp8266.h +3 -0
  337. esphome/components/ota/ota_backend_arduino_libretiny.cpp +12 -2
  338. esphome/components/ota/ota_backend_arduino_libretiny.h +3 -0
  339. esphome/components/ota/ota_backend_arduino_rp2040.cpp +9 -2
  340. esphome/components/ota/ota_backend_arduino_rp2040.h +3 -0
  341. esphome/components/ota/ota_backend_esp_idf.cpp +10 -16
  342. esphome/components/ota/ota_backend_esp_idf.h +1 -0
  343. esphome/components/packages/__init__.py +5 -2
  344. esphome/components/packet_transport/binary_sensor.py +61 -4
  345. esphome/components/packet_transport/packet_transport.cpp +31 -1
  346. esphome/components/packet_transport/packet_transport.h +11 -5
  347. esphome/components/pcf8574/__init__.py +1 -1
  348. esphome/components/pi4ioe5v6408/__init__.py +84 -0
  349. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +171 -0
  350. esphome/components/pi4ioe5v6408/pi4ioe5v6408.h +70 -0
  351. esphome/components/pmsa003i/pmsa003i.h +0 -1
  352. esphome/components/pmsx003/pmsx003.h +0 -1
  353. esphome/components/pn7150/pn7150.cpp +7 -7
  354. esphome/components/pn7150/pn7150.h +0 -1
  355. esphome/components/pn7160/pn7160.cpp +7 -7
  356. esphome/components/pn7160/pn7160.h +0 -1
  357. esphome/components/preferences/syncer.h +2 -0
  358. esphome/components/prometheus/prometheus_handler.h +1 -1
  359. esphome/components/psram/psram.cpp +0 -20
  360. esphome/components/pulse_counter/pulse_counter_sensor.h +0 -1
  361. esphome/components/pulse_meter/pulse_meter_sensor.cpp +8 -4
  362. esphome/components/pulse_width/pulse_width.h +0 -1
  363. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +0 -4
  364. esphome/components/pvvx_mithermometer/display/pvvx_display.h +0 -2
  365. esphome/components/pvvx_mithermometer/pvvx_mithermometer.h +0 -1
  366. esphome/components/qr_code/__init__.py +13 -10
  367. esphome/components/qwiic_pir/qwiic_pir.h +0 -1
  368. esphome/components/radon_eye_ble/radon_eye_listener.cpp +1 -1
  369. esphome/components/rc522/rc522.h +0 -1
  370. esphome/components/rdm6300/rdm6300.h +0 -2
  371. esphome/components/remote_base/__init__.py +7 -5
  372. esphome/components/remote_base/remote_base.cpp +24 -21
  373. esphome/components/remote_base/remote_base.h +3 -26
  374. esphome/components/remote_receiver/__init__.py +40 -46
  375. esphome/components/remote_receiver/remote_receiver.h +4 -18
  376. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -87
  377. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +1 -1
  378. esphome/components/remote_transmitter/__init__.py +42 -43
  379. esphome/components/remote_transmitter/remote_transmitter.h +2 -14
  380. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -77
  381. esphome/components/resistance/resistance_sensor.h +0 -1
  382. esphome/components/rp2040/__init__.py +1 -0
  383. esphome/components/rp2040/helpers.cpp +55 -0
  384. esphome/components/rp2040_pio_led_strip/led_strip.cpp +2 -2
  385. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -4
  386. esphome/components/rtttl/__init__.py +4 -4
  387. esphome/components/rtttl/rtttl.cpp +10 -1
  388. esphome/components/ruuvitag/ruuvitag.h +0 -1
  389. esphome/components/safe_mode/safe_mode.cpp +2 -0
  390. esphome/components/safe_mode/safe_mode.h +4 -1
  391. esphome/components/scd30/scd30.h +0 -1
  392. esphome/components/scd30/sensor.py +2 -2
  393. esphome/components/scd4x/scd4x.cpp +61 -54
  394. esphome/components/scd4x/scd4x.h +17 -15
  395. esphome/components/scd4x/sensor.py +4 -4
  396. esphome/components/script/script.h +0 -2
  397. esphome/components/sdp3x/sensor.py +1 -1
  398. esphome/components/select/__init__.py +5 -2
  399. esphome/components/sen5x/sen5x.h +0 -1
  400. esphome/components/senseair/senseair.h +0 -1
  401. esphome/components/sensor/__init__.py +4 -2
  402. esphome/components/sensor/filter.cpp +1 -1
  403. esphome/components/sensor/sensor.cpp +12 -6
  404. esphome/components/sensor/sensor.h +13 -5
  405. esphome/components/servo/servo.h +0 -1
  406. esphome/components/sfa30/sfa30.h +0 -1
  407. esphome/components/sgp30/sgp30.h +0 -1
  408. esphome/components/sgp4x/sgp4x.h +0 -1
  409. esphome/components/shelly_dimmer/stm32flash.cpp +1 -2
  410. esphome/components/sht4x/sht4x.h +0 -1
  411. esphome/components/sm300d2/sm300d2.h +0 -2
  412. esphome/components/smt100/sensor.py +8 -4
  413. esphome/components/smt100/smt100.cpp +5 -5
  414. esphome/components/smt100/smt100.h +3 -3
  415. esphome/components/sn74hc595/__init__.py +1 -1
  416. esphome/components/sn74hc595/sn74hc595.cpp +5 -4
  417. esphome/components/sntp/sntp_component.cpp +9 -3
  418. esphome/components/sntp/time.py +2 -0
  419. esphome/components/socket/__init__.py +17 -0
  420. esphome/components/spi/__init__.py +27 -6
  421. esphome/components/spi/spi.cpp +3 -2
  422. esphome/components/spi/spi.h +9 -3
  423. esphome/components/spi/spi_arduino.cpp +3 -5
  424. esphome/components/spi/spi_esp_idf.cpp +40 -21
  425. esphome/components/spi_led_strip/spi_led_strip.cpp +1 -1
  426. esphome/components/sps30/sps30.h +0 -1
  427. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  428. esphome/components/st7701s/st7701s.cpp +0 -4
  429. esphome/components/status/status_binary_sensor.h +0 -2
  430. esphome/components/substitutions/__init__.py +76 -19
  431. esphome/components/substitutions/jinja.py +99 -0
  432. esphome/components/sun/sun.cpp +3 -4
  433. esphome/components/switch/__init__.py +5 -2
  434. esphome/components/switch/binary_sensor/switch_binary_sensor.h +0 -1
  435. esphome/components/sx126x/__init__.py +317 -0
  436. esphome/components/sx126x/automation.h +62 -0
  437. esphome/components/sx126x/packet_transport/__init__.py +26 -0
  438. esphome/components/sx126x/packet_transport/sx126x_transport.cpp +26 -0
  439. esphome/components/sx126x/packet_transport/sx126x_transport.h +25 -0
  440. esphome/components/sx126x/sx126x.cpp +523 -0
  441. esphome/components/sx126x/sx126x.h +140 -0
  442. esphome/components/sx126x/sx126x_reg.h +163 -0
  443. esphome/components/sx127x/__init__.py +325 -0
  444. esphome/components/sx127x/automation.h +62 -0
  445. esphome/components/sx127x/packet_transport/__init__.py +26 -0
  446. esphome/components/sx127x/packet_transport/sx127x_transport.cpp +26 -0
  447. esphome/components/sx127x/packet_transport/sx127x_transport.h +25 -0
  448. esphome/components/sx127x/sx127x.cpp +498 -0
  449. esphome/components/sx127x/sx127x.h +128 -0
  450. esphome/components/sx127x/sx127x_reg.h +295 -0
  451. esphome/components/syslog/esphome_syslog.cpp +5 -3
  452. esphome/components/syslog/esphome_syslog.h +1 -1
  453. esphome/components/tca9555/__init__.py +1 -1
  454. esphome/components/template/binary_sensor/template_binary_sensor.cpp +1 -9
  455. esphome/components/text/__init__.py +5 -2
  456. esphome/components/text_sensor/__init__.py +5 -2
  457. esphome/components/thermostat/thermostat_climate.cpp +34 -31
  458. esphome/components/thermostat/thermostat_climate.h +43 -39
  459. esphome/components/time/__init__.py +16 -2
  460. esphome/components/time/real_time_clock.cpp +4 -0
  461. esphome/components/time/real_time_clock.h +5 -1
  462. esphome/components/tlc5971/tlc5971.cpp +4 -1
  463. esphome/components/tmp1075/tmp1075.h +0 -2
  464. esphome/components/tof10120/tof10120_sensor.h +0 -1
  465. esphome/components/tormatic/tormatic_cover.h +0 -1
  466. esphome/components/total_daily_energy/total_daily_energy.h +0 -1
  467. esphome/components/tsl2591/tsl2591.cpp +1 -1
  468. esphome/components/ttp229_bsf/ttp229_bsf.h +0 -1
  469. esphome/components/ttp229_lsf/ttp229_lsf.h +0 -1
  470. esphome/components/tx20/tx20.cpp +2 -2
  471. esphome/components/uart/__init__.py +18 -0
  472. esphome/components/uart/uart_component_esp_idf.cpp +1 -5
  473. esphome/components/update/__init__.py +5 -2
  474. esphome/components/update/update_entity.h +8 -0
  475. esphome/components/usb_host/__init__.py +5 -2
  476. esphome/components/valve/__init__.py +5 -2
  477. esphome/components/vbus/vbus.h +0 -1
  478. esphome/components/veml3235/veml3235.h +0 -1
  479. esphome/components/veml7700/veml7700.h +0 -1
  480. esphome/components/vl53l0x/vl53l0x_sensor.h +0 -1
  481. esphome/components/voice_assistant/voice_assistant.cpp +4 -4
  482. esphome/components/watchdog/watchdog.cpp +0 -4
  483. esphome/components/waveshare_epaper/waveshare_epaper.cpp +6 -6
  484. esphome/components/web_server/__init__.py +34 -19
  485. esphome/components/web_server/ota/__init__.py +32 -0
  486. esphome/components/web_server/ota/ota_web_server.cpp +210 -0
  487. esphome/components/web_server/ota/ota_web_server.h +26 -0
  488. esphome/components/web_server/web_server.cpp +311 -430
  489. esphome/components/web_server/web_server.h +33 -23
  490. esphome/components/web_server/web_server_v1.cpp +4 -5
  491. esphome/components/web_server_base/__init__.py +5 -2
  492. esphome/components/web_server_base/web_server_base.cpp +2 -94
  493. esphome/components/web_server_base/web_server_base.h +5 -25
  494. esphome/components/web_server_idf/multipart.cpp +254 -0
  495. esphome/components/web_server_idf/multipart.h +86 -0
  496. esphome/components/web_server_idf/utils.cpp +32 -0
  497. esphome/components/web_server_idf/utils.h +10 -0
  498. esphome/components/web_server_idf/web_server_idf.cpp +162 -16
  499. esphome/components/web_server_idf/web_server_idf.h +11 -10
  500. esphome/components/wiegand/wiegand.cpp +2 -2
  501. esphome/components/wifi/__init__.py +18 -0
  502. esphome/components/wifi/wifi_component.cpp +17 -22
  503. esphome/components/wifi/wifi_component.h +27 -23
  504. esphome/components/wifi/wifi_component_esp32_arduino.cpp +52 -59
  505. esphome/components/wifi/wifi_component_esp8266.cpp +46 -46
  506. esphome/components/wifi/wifi_component_esp_idf.cpp +35 -36
  507. esphome/components/wifi/wifi_component_libretiny.cpp +26 -27
  508. esphome/components/wifi/wifi_component_pico_w.cpp +3 -3
  509. esphome/components/wifi_info/wifi_info_text_sensor.cpp +6 -6
  510. esphome/components/wireguard/__init__.py +2 -11
  511. esphome/components/xiaomi_ble/xiaomi_ble.cpp +13 -1
  512. esphome/components/xiaomi_ble/xiaomi_ble.h +1 -0
  513. esphome/components/xiaomi_cgd1/xiaomi_cgd1.h +0 -1
  514. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.h +0 -1
  515. esphome/components/xiaomi_cgg1/xiaomi_cgg1.h +0 -1
  516. esphome/components/xiaomi_cgpr1/xiaomi_cgpr1.h +0 -1
  517. esphome/components/xiaomi_gcls002/xiaomi_gcls002.h +0 -1
  518. esphome/components/xiaomi_hhccjcy01/xiaomi_hhccjcy01.h +0 -1
  519. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.h +0 -1
  520. esphome/components/xiaomi_hhccpot002/xiaomi_hhccpot002.h +0 -1
  521. esphome/components/xiaomi_jqjcy01ym/xiaomi_jqjcy01ym.h +0 -1
  522. esphome/components/xiaomi_lywsd02/xiaomi_lywsd02.h +0 -1
  523. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.h +0 -1
  524. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.h +0 -1
  525. esphome/components/xiaomi_lywsdcgq/xiaomi_lywsdcgq.h +0 -1
  526. esphome/components/xiaomi_mhoc303/xiaomi_mhoc303.h +0 -1
  527. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.h +0 -1
  528. esphome/components/xiaomi_miscale/xiaomi_miscale.h +0 -1
  529. esphome/components/xiaomi_mjyd02yla/xiaomi_mjyd02yla.h +0 -1
  530. esphome/components/xiaomi_mue4094rt/xiaomi_mue4094rt.h +0 -1
  531. esphome/components/xiaomi_rtcgq02lm/xiaomi_rtcgq02lm.h +0 -1
  532. esphome/components/xiaomi_wx08zm/xiaomi_wx08zm.h +0 -1
  533. esphome/components/xiaomi_xmwsdj04mmc/__init__.py +0 -0
  534. esphome/components/xiaomi_xmwsdj04mmc/sensor.py +77 -0
  535. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.cpp +77 -0
  536. esphome/components/xiaomi_xmwsdj04mmc/xiaomi_xmwsdj04mmc.h +36 -0
  537. esphome/components/zio_ultrasonic/zio_ultrasonic.h +0 -2
  538. esphome/components/zyaura/zyaura.h +0 -1
  539. esphome/config.py +88 -22
  540. esphome/config_helpers.py +74 -1
  541. esphome/config_validation.py +12 -1
  542. esphome/const.py +65 -10
  543. esphome/core/__init__.py +18 -2
  544. esphome/core/application.cpp +163 -10
  545. esphome/core/application.h +145 -165
  546. esphome/core/area.h +19 -0
  547. esphome/core/automation.h +58 -9
  548. esphome/core/color.cpp +3 -5
  549. esphome/core/color.h +16 -16
  550. esphome/core/component.cpp +151 -18
  551. esphome/core/component.h +98 -4
  552. esphome/core/component_iterator.cpp +7 -7
  553. esphome/core/component_iterator.h +9 -7
  554. esphome/core/config.py +155 -6
  555. esphome/core/controller.cpp +4 -2
  556. esphome/core/controller.h +1 -1
  557. esphome/core/datatypes.h +2 -2
  558. esphome/core/defines.h +17 -2
  559. esphome/core/device.h +20 -0
  560. esphome/core/entity_base.cpp +20 -15
  561. esphome/core/entity_base.h +76 -0
  562. esphome/core/entity_helpers.py +162 -1
  563. esphome/core/event_pool.h +81 -0
  564. esphome/core/helpers.cpp +75 -230
  565. esphome/core/helpers.h +164 -104
  566. esphome/core/lock_free_queue.h +151 -0
  567. esphome/core/log.cpp +2 -2
  568. esphome/core/log.h +2 -0
  569. esphome/core/optional.h +5 -0
  570. esphome/core/ring_buffer.cpp +2 -2
  571. esphome/core/scheduler.cpp +278 -103
  572. esphome/core/scheduler.h +157 -17
  573. esphome/core/time.cpp +5 -5
  574. esphome/core/time.h +5 -5
  575. esphome/cpp_generator.py +17 -0
  576. esphome/cpp_helpers.py +0 -22
  577. esphome/cpp_types.py +3 -1
  578. esphome/dashboard/entries.py +1 -1
  579. esphome/dashboard/util/text.py +5 -21
  580. esphome/dashboard/web_server.py +9 -1
  581. esphome/helpers.py +47 -0
  582. esphome/loader.py +15 -1
  583. esphome/pins.py +14 -8
  584. esphome/wizard.py +16 -3
  585. esphome/writer.py +21 -3
  586. esphome/yaml_util.py +0 -2
  587. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/METADATA +10 -9
  588. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/RECORD +593 -533
  589. esphome/components/esp32_ble/ble_event_pool.h +0 -72
  590. esphome/components/esp32_ble/queue.h +0 -85
  591. esphome/components/esp32_hall/esp32_hall.cpp +0 -25
  592. esphome/components/esp32_hall/esp32_hall.h +0 -23
  593. esphome/components/esp32_touch/esp32_touch.cpp +0 -355
  594. esphome/components/ld2410/button/reset_button.cpp +0 -9
  595. esphome/components/ld2450/button/reset_button.cpp +0 -9
  596. esphome/components/openthread/tlv.py +0 -65
  597. /esphome/{dashboard/enum.py → enum.py} +0 -0
  598. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/WHEEL +0 -0
  599. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/entry_points.txt +0 -0
  600. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/licenses/LICENSE +0 -0
  601. {esphome-2025.6.2.dist-info → esphome-2025.7.0b1.dist-info}/top_level.txt +0 -0
@@ -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:
@@ -31,6 +31,10 @@ void PulseMeterSensor::setup() {
31
31
  this->pulse_state_.latched_ = this->last_pin_val_;
32
32
  this->pin_->attach_interrupt(PulseMeterSensor::pulse_intr, this, gpio::INTERRUPT_ANY_EDGE);
33
33
  }
34
+
35
+ if (this->total_sensor_ != nullptr) {
36
+ this->total_sensor_->publish_state(this->total_pulses_);
37
+ }
34
38
  }
35
39
 
36
40
  void PulseMeterSensor::loop() {
@@ -63,7 +67,7 @@ void PulseMeterSensor::loop() {
63
67
  // If an edge was peeked, repay the debt
64
68
  if (this->peeked_edge_ && this->get_->count_ > 0) {
65
69
  this->peeked_edge_ = false;
66
- this->get_->count_--;
70
+ this->get_->count_--; // NOLINT(clang-diagnostic-deprecated-volatile)
67
71
  }
68
72
 
69
73
  // If there is an unprocessed edge, and filter_us_ has passed since, count this edge early
@@ -71,7 +75,7 @@ void PulseMeterSensor::loop() {
71
75
  now - this->get_->last_rising_edge_us_ >= this->filter_us_) {
72
76
  this->peeked_edge_ = true;
73
77
  this->get_->last_detected_edge_us_ = this->get_->last_rising_edge_us_;
74
- this->get_->count_++;
78
+ this->get_->count_++; // NOLINT(clang-diagnostic-deprecated-volatile)
75
79
  }
76
80
 
77
81
  // Check if we detected a pulse this loop
@@ -146,7 +150,7 @@ void IRAM_ATTR PulseMeterSensor::edge_intr(PulseMeterSensor *sensor) {
146
150
  state.last_sent_edge_us_ = now;
147
151
  set.last_detected_edge_us_ = now;
148
152
  set.last_rising_edge_us_ = now;
149
- set.count_++;
153
+ set.count_++; // NOLINT(clang-diagnostic-deprecated-volatile)
150
154
  }
151
155
 
152
156
  // This ISR is bound to rising edges, so the pin is high
@@ -169,7 +173,7 @@ void IRAM_ATTR PulseMeterSensor::pulse_intr(PulseMeterSensor *sensor) {
169
173
  } else if (length && !state.latched_ && sensor->last_pin_val_) { // Long enough high edge
170
174
  state.latched_ = true;
171
175
  set.last_detected_edge_us_ = state.last_intr_;
172
- set.count_++;
176
+ set.count_++; // NOLINT(clang-diagnostic-deprecated-volatile)
173
177
  }
174
178
 
175
179
  // Due to order of operations this includes
@@ -32,7 +32,6 @@ class PulseWidthSensor : public sensor::Sensor, public PollingComponent {
32
32
  void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
33
33
  void setup() override { this->store_.setup(this->pin_); }
34
34
  void dump_config() override;
35
- float get_setup_priority() const override { return setup_priority::DATA; }
36
35
  void update() override;
37
36
 
38
37
  protected:
@@ -146,11 +146,7 @@ void PVVXDisplay::sync_time_() {
146
146
  }
147
147
  time.recalc_timestamp_utc(true); // calculate timestamp of local time
148
148
  uint8_t blk[5] = {};
149
- #if ESP_IDF_VERSION_MAJOR >= 5
150
149
  ESP_LOGD(TAG, "[%s] Sync time with timestamp %" PRIu64 ".", this->parent_->address_str().c_str(), time.timestamp);
151
- #else
152
- ESP_LOGD(TAG, "[%s] Sync time with timestamp %lu.", this->parent_->address_str().c_str(), time.timestamp);
153
- #endif
154
150
  blk[0] = 0x23;
155
151
  blk[1] = time.timestamp & 0xff;
156
152
  blk[2] = (time.timestamp >> 8) & 0xff;
@@ -39,8 +39,6 @@ class PVVXDisplay : public ble_client::BLEClientNode, public PollingComponent {
39
39
 
40
40
  void dump_config() override;
41
41
 
42
- float get_setup_priority() const override { return setup_priority::DATA; }
43
-
44
42
  void update() override;
45
43
 
46
44
  void gattc_event_handler(esp_gattc_cb_event_t event, esp_gatt_if_t gattc_if,
@@ -25,7 +25,6 @@ class PVVXMiThermometer : public Component, public esp32_ble_tracker::ESPBTDevic
25
25
 
26
26
  bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
27
27
  void dump_config() override;
28
- float get_setup_priority() const override { return setup_priority::DATA; }
29
28
  void set_temperature(sensor::Sensor *temperature) { temperature_ = temperature; }
30
29
  void set_humidity(sensor::Sensor *humidity) { humidity_ = humidity; }
31
30
  void set_battery_level(sensor::Sensor *battery_level) { battery_level_ = battery_level; }
@@ -21,21 +21,24 @@ ECC = {
21
21
  "HIGH": qrcodegen_Ecc.qrcodegen_Ecc_HIGH,
22
22
  }
23
23
 
24
- CONFIG_SCHEMA = cv.Schema(
25
- {
26
- cv.Required(CONF_ID): cv.declare_id(QRCode),
27
- cv.Required(CONF_VALUE): cv.string,
28
- cv.Optional(CONF_ECC, default="LOW"): cv.enum(ECC, upper=True),
29
- }
24
+ CONFIG_SCHEMA = cv.ensure_list(
25
+ cv.Schema(
26
+ {
27
+ cv.Required(CONF_ID): cv.declare_id(QRCode),
28
+ cv.Required(CONF_VALUE): cv.string,
29
+ cv.Optional(CONF_ECC, default="LOW"): cv.enum(ECC, upper=True),
30
+ }
31
+ )
30
32
  )
31
33
 
32
34
 
33
35
  async def to_code(config):
34
36
  cg.add_library("wjtje/qr-code-generator-library", "^1.7.0")
35
37
 
36
- var = cg.new_Pvariable(config[CONF_ID])
37
- cg.add(var.set_value(config[CONF_VALUE]))
38
- cg.add(var.set_ecc(ECC[config[CONF_ECC]]))
39
- await cg.register_component(var, config)
38
+ for entry in config:
39
+ var = cg.new_Pvariable(entry[CONF_ID])
40
+ cg.add(var.set_value(entry[CONF_VALUE]))
41
+ cg.add(var.set_ecc(ECC[entry[CONF_ECC]]))
42
+ await cg.register_component(var, entry)
40
43
 
41
44
  cg.add_define("USE_QR_CODE")