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
@@ -11,7 +11,6 @@ class CopyLock : public lock::Lock, public Component {
11
11
  void set_source(lock::Lock *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const lock::LockCall &call) override;
@@ -11,7 +11,6 @@ class CopyNumber : public number::Number, public Component {
11
11
  void set_source(number::Number *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(float value) override;
@@ -11,7 +11,6 @@ class CopySelect : public select::Select, public Component {
11
11
  void set_source(select::Select *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const std::string &value) override;
@@ -11,7 +11,6 @@ class CopySensor : public sensor::Sensor, public Component {
11
11
  void set_source(sensor::Sensor *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  sensor::Sensor *source_;
@@ -11,7 +11,6 @@ class CopySwitch : public switch_::Switch, public Component {
11
11
  void set_source(switch_::Switch *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void write_state(bool state) override;
@@ -11,7 +11,6 @@ class CopyText : public text::Text, public Component {
11
11
  void set_source(text::Text *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  void control(const std::string &value) override;
@@ -11,7 +11,6 @@ class CopyTextSensor : public text_sensor::TextSensor, public Component {
11
11
  void set_source(text_sensor::TextSensor *source) { source_ = source; }
12
12
  void setup() override;
13
13
  void dump_config() override;
14
- float get_setup_priority() const override { return setup_priority::DATA; }
15
14
 
16
15
  protected:
17
16
  text_sensor::TextSensor *source_;
@@ -33,8 +33,8 @@ from esphome.const import (
33
33
  DEVICE_CLASS_WINDOW,
34
34
  )
35
35
  from esphome.core import CORE, coroutine_with_priority
36
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
36
37
  from esphome.cpp_generator import MockObjClass
37
- from esphome.cpp_helpers import setup_entity
38
38
 
39
39
  IS_PLATFORM_COMPONENT = True
40
40
 
@@ -126,6 +126,9 @@ _COVER_SCHEMA = (
126
126
  )
127
127
 
128
128
 
129
+ _COVER_SCHEMA.add_extra(entity_duplicate_validator("cover"))
130
+
131
+
129
132
  def cover_schema(
130
133
  class_: MockObjClass,
131
134
  *,
@@ -154,7 +157,7 @@ COVER_SCHEMA.add_extra(cv.deprecated_schema_constant("cover"))
154
157
 
155
158
 
156
159
  async def setup_cover_core_(var, config):
157
- await setup_entity(var, config)
160
+ await setup_entity(var, config, "cover")
158
161
 
159
162
  if (device_class := config.get(CONF_DEVICE_CLASS)) is not None:
160
163
  cg.add(var.set_device_class(device_class))
@@ -77,7 +77,6 @@ class CS5460AComponent : public Component,
77
77
 
78
78
  void setup() override;
79
79
  void loop() override {}
80
- float get_setup_priority() const override { return setup_priority::DATA; }
81
80
  void dump_config() override;
82
81
 
83
82
  protected:
@@ -22,8 +22,8 @@ from esphome.const import (
22
22
  CONF_YEAR,
23
23
  )
24
24
  from esphome.core import CORE, coroutine_with_priority
25
+ from esphome.core.entity_helpers import entity_duplicate_validator, setup_entity
25
26
  from esphome.cpp_generator import MockObjClass
26
- from esphome.cpp_helpers import setup_entity
27
27
 
28
28
  CODEOWNERS = ["@rfdarter", "@jesserockz"]
29
29
 
@@ -84,6 +84,8 @@ _DATETIME_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend(
84
84
  .extend(cv.MQTT_COMMAND_COMPONENT_SCHEMA)
85
85
  ).add_extra(_validate_time_present)
86
86
 
87
+ _DATETIME_SCHEMA.add_extra(entity_duplicate_validator("datetime"))
88
+
87
89
 
88
90
  def date_schema(class_: MockObjClass) -> cv.Schema:
89
91
  schema = cv.Schema(
@@ -133,7 +135,7 @@ def datetime_schema(class_: MockObjClass) -> cv.Schema:
133
135
 
134
136
 
135
137
  async def setup_datetime_core_(var, config):
136
- await setup_entity(var, config)
138
+ await setup_entity(var, config, "datetime")
137
139
 
138
140
  if (mqtt_id := config.get(CONF_MQTT_ID)) is not None:
139
141
  mqtt_ = cg.new_Pvariable(mqtt_id, var)
@@ -1,4 +1,5 @@
1
1
  import esphome.codegen as cg
2
+ from esphome.config_helpers import filter_source_files_from_platform
2
3
  import esphome.config_validation as cv
3
4
  from esphome.const import (
4
5
  CONF_BLOCK,
@@ -7,6 +8,7 @@ from esphome.const import (
7
8
  CONF_FREE,
8
9
  CONF_ID,
9
10
  CONF_LOOP_TIME,
11
+ PlatformFramework,
10
12
  )
11
13
 
12
14
  CODEOWNERS = ["@OttoWinter"]
@@ -44,3 +46,21 @@ CONFIG_SCHEMA = cv.All(
44
46
  async def to_code(config):
45
47
  var = cg.new_Pvariable(config[CONF_ID])
46
48
  await cg.register_component(var, config)
49
+
50
+
51
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
52
+ {
53
+ "debug_esp32.cpp": {
54
+ PlatformFramework.ESP32_ARDUINO,
55
+ PlatformFramework.ESP32_IDF,
56
+ },
57
+ "debug_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
58
+ "debug_host.cpp": {PlatformFramework.HOST_NATIVE},
59
+ "debug_rp2040.cpp": {PlatformFramework.RP2040_ARDUINO},
60
+ "debug_libretiny.cpp": {
61
+ PlatformFramework.BK72XX_ARDUINO,
62
+ PlatformFramework.RTL87XX_ARDUINO,
63
+ PlatformFramework.LN882X_ARDUINO,
64
+ },
65
+ }
66
+ )
@@ -1,6 +1,6 @@
1
1
  from esphome import automation, pins
2
2
  import esphome.codegen as cg
3
- from esphome.components import time
3
+ from esphome.components import esp32, time
4
4
  from esphome.components.esp32 import get_esp32_variant
5
5
  from esphome.components.esp32.const import (
6
6
  VARIANT_ESP32,
@@ -11,6 +11,7 @@ from esphome.components.esp32.const import (
11
11
  VARIANT_ESP32S2,
12
12
  VARIANT_ESP32S3,
13
13
  )
14
+ from esphome.config_helpers import filter_source_files_from_platform
14
15
  import esphome.config_validation as cv
15
16
  from esphome.const import (
16
17
  CONF_DEFAULT,
@@ -27,6 +28,7 @@ from esphome.const import (
27
28
  CONF_WAKEUP_PIN,
28
29
  PLATFORM_ESP32,
29
30
  PLATFORM_ESP8266,
31
+ PlatformFramework,
30
32
  )
31
33
 
32
34
  WAKEUP_PINS = {
@@ -114,12 +116,20 @@ def validate_pin_number(value):
114
116
  return value
115
117
 
116
118
 
117
- def validate_config(config):
118
- if get_esp32_variant() == VARIANT_ESP32C3 and CONF_ESP32_EXT1_WAKEUP in config:
119
- raise cv.Invalid("ESP32-C3 does not support wakeup from touch.")
120
- if get_esp32_variant() == VARIANT_ESP32C3 and CONF_TOUCH_WAKEUP in config:
121
- raise cv.Invalid("ESP32-C3 does not support wakeup from ext1")
122
- return config
119
+ def _validate_ex1_wakeup_mode(value):
120
+ if value == "ALL_LOW":
121
+ esp32.only_on_variant(supported=[VARIANT_ESP32], msg_prefix="ALL_LOW")(value)
122
+ if value == "ANY_LOW":
123
+ esp32.only_on_variant(
124
+ supported=[
125
+ VARIANT_ESP32S2,
126
+ VARIANT_ESP32S3,
127
+ VARIANT_ESP32C6,
128
+ VARIANT_ESP32H2,
129
+ ],
130
+ msg_prefix="ANY_LOW",
131
+ )(value)
132
+ return value
123
133
 
124
134
 
125
135
  deep_sleep_ns = cg.esphome_ns.namespace("deep_sleep")
@@ -146,6 +156,7 @@ WAKEUP_PIN_MODES = {
146
156
  esp_sleep_ext1_wakeup_mode_t = cg.global_ns.enum("esp_sleep_ext1_wakeup_mode_t")
147
157
  Ext1Wakeup = deep_sleep_ns.struct("Ext1Wakeup")
148
158
  EXT1_WAKEUP_MODES = {
159
+ "ANY_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_LOW,
149
160
  "ALL_LOW": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ALL_LOW,
150
161
  "ANY_HIGH": esp_sleep_ext1_wakeup_mode_t.ESP_EXT1_WAKEUP_ANY_HIGH,
151
162
  }
@@ -185,16 +196,28 @@ CONFIG_SCHEMA = cv.All(
185
196
  ),
186
197
  cv.Optional(CONF_ESP32_EXT1_WAKEUP): cv.All(
187
198
  cv.only_on_esp32,
199
+ esp32.only_on_variant(
200
+ unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from ext1"
201
+ ),
188
202
  cv.Schema(
189
203
  {
190
204
  cv.Required(CONF_PINS): cv.ensure_list(
191
205
  pins.internal_gpio_input_pin_schema, validate_pin_number
192
206
  ),
193
- cv.Required(CONF_MODE): cv.enum(EXT1_WAKEUP_MODES, upper=True),
207
+ cv.Required(CONF_MODE): cv.All(
208
+ cv.enum(EXT1_WAKEUP_MODES, upper=True),
209
+ _validate_ex1_wakeup_mode,
210
+ ),
194
211
  }
195
212
  ),
196
213
  ),
197
- cv.Optional(CONF_TOUCH_WAKEUP): cv.All(cv.only_on_esp32, cv.boolean),
214
+ cv.Optional(CONF_TOUCH_WAKEUP): cv.All(
215
+ cv.only_on_esp32,
216
+ esp32.only_on_variant(
217
+ unsupported=[VARIANT_ESP32C3], msg_prefix="Wakeup from touch"
218
+ ),
219
+ cv.boolean,
220
+ ),
198
221
  }
199
222
  ).extend(cv.COMPONENT_SCHEMA),
200
223
  cv.only_on([PLATFORM_ESP32, PLATFORM_ESP8266]),
@@ -313,3 +336,14 @@ async def deep_sleep_action_to_code(config, action_id, template_arg, args):
313
336
  var = cg.new_Pvariable(action_id, template_arg)
314
337
  await cg.register_parented(var, config[CONF_ID])
315
338
  return var
339
+
340
+
341
+ FILTER_SOURCE_FILES = filter_source_files_from_platform(
342
+ {
343
+ "deep_sleep_esp32.cpp": {
344
+ PlatformFramework.ESP32_ARDUINO,
345
+ PlatformFramework.ESP32_IDF,
346
+ },
347
+ "deep_sleep_esp8266.cpp": {PlatformFramework.ESP8266_ARDUINO},
348
+ }
349
+ )
@@ -455,7 +455,7 @@ CONFIG_SCHEMA = cv.Schema(
455
455
  CONF_NAME: "Demo Plain Sensor",
456
456
  },
457
457
  {
458
- CONF_NAME: "Demo Temperature Sensor",
458
+ CONF_NAME: "Demo Temperature Sensor 1",
459
459
  CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
460
460
  CONF_ICON: ICON_THERMOMETER,
461
461
  CONF_ACCURACY_DECIMALS: 1,
@@ -463,7 +463,7 @@ CONFIG_SCHEMA = cv.Schema(
463
463
  CONF_STATE_CLASS: STATE_CLASS_MEASUREMENT,
464
464
  },
465
465
  {
466
- CONF_NAME: "Demo Temperature Sensor",
466
+ CONF_NAME: "Demo Temperature Sensor 2",
467
467
  CONF_UNIT_OF_MEASUREMENT: UNIT_CELSIUS,
468
468
  CONF_ICON: ICON_THERMOMETER,
469
469
  CONF_ACCURACY_DECIMALS: 1,
@@ -1,5 +1,6 @@
1
1
  #include "display.h"
2
2
  #include <utility>
3
+ #include <numbers>
3
4
  #include "display_color_utils.h"
4
5
  #include "esphome/core/hal.h"
5
6
  #include "esphome/core/log.h"
@@ -424,15 +425,15 @@ void HOT Display::get_regular_polygon_vertex(int vertex_id, int *vertex_x, int *
424
425
  // hence we rotate the shape by 270° to orient the polygon up.
425
426
  rotation_degrees += ROTATION_270_DEGREES;
426
427
  // Convert the rotation to radians, easier to use in trigonometrical calculations
427
- float rotation_radians = rotation_degrees * PI / 180;
428
+ float rotation_radians = rotation_degrees * std::numbers::pi / 180;
428
429
  // A pointy top variation means the first vertex of the polygon is at the top center of the shape, this requires no
429
430
  // additional rotation of the shape.
430
431
  // A flat top variation means the first point of the polygon has to be rotated so that the first edge is horizontal,
431
432
  // this requires to rotate the shape by π/edges radians counter-clockwise so that the first point is located on the
432
433
  // left side of the first horizontal edge.
433
- rotation_radians -= (variation == VARIATION_FLAT_TOP) ? PI / edges : 0.0;
434
+ rotation_radians -= (variation == VARIATION_FLAT_TOP) ? std::numbers::pi / edges : 0.0;
434
435
 
435
- float vertex_angle = ((float) vertex_id) / edges * 2 * PI + rotation_radians;
436
+ float vertex_angle = ((float) vertex_id) / edges * 2 * std::numbers::pi + rotation_radians;
436
437
  *vertex_x = (int) round(cos(vertex_angle) * radius) + center_x;
437
438
  *vertex_y = (int) round(sin(vertex_angle) * radius) + center_y;
438
439
  }
@@ -138,8 +138,6 @@ enum DisplayRotation {
138
138
  DISPLAY_ROTATION_270_DEGREES = 270,
139
139
  };
140
140
 
141
- #define PI 3.1415926535897932384626433832795
142
-
143
141
  const int EDGES_TRIGON = 3;
144
142
  const int EDGES_TRIANGLE = 3;
145
143
  const int EDGES_TETRAGON = 4;
@@ -11,7 +11,7 @@ namespace display {
11
11
  static const char *const TAG = "display";
12
12
 
13
13
  void DisplayBuffer::init_internal_(uint32_t buffer_length) {
14
- ExternalRAMAllocator<uint8_t> allocator(ExternalRAMAllocator<uint8_t>::ALLOW_FAILURE);
14
+ RAMAllocator<uint8_t> allocator;
15
15
  this->buffer_ = allocator.allocate(buffer_length);
16
16
  if (this->buffer_ == nullptr) {
17
17
  ESP_LOGE(TAG, "Could not allocate buffer for display!");
@@ -0,0 +1 @@
1
+ CODEOWNERS = ["@mrk-its"]
@@ -0,0 +1,209 @@
1
+ #include "ds2484.h"
2
+
3
+ namespace esphome {
4
+ namespace ds2484 {
5
+ static const char *const TAG = "ds2484.onewire";
6
+
7
+ void DS2484OneWireBus::setup() {
8
+ ESP_LOGCONFIG(TAG, "Running setup");
9
+ this->reset_device();
10
+ this->search();
11
+ }
12
+
13
+ void DS2484OneWireBus::dump_config() {
14
+ ESP_LOGCONFIG(TAG, "1-wire bus:");
15
+ this->dump_devices_(TAG);
16
+ }
17
+
18
+ bool DS2484OneWireBus::read_status_(uint8_t *status) {
19
+ for (uint8_t retry_nr = 0; retry_nr < 10; retry_nr++) {
20
+ if (this->read(status, 1) != i2c::ERROR_OK) {
21
+ ESP_LOGE(TAG, "read status error");
22
+ return false;
23
+ }
24
+ ESP_LOGVV(TAG, "status: %02x", *status);
25
+ if (!(*status & 1)) {
26
+ return true;
27
+ }
28
+ }
29
+ ESP_LOGE(TAG, "read status error: too many retries");
30
+ return false;
31
+ }
32
+
33
+ bool DS2484OneWireBus::wait_for_completion_() {
34
+ uint8_t status;
35
+ return this->read_status_(&status);
36
+ }
37
+
38
+ bool DS2484OneWireBus::reset_device() {
39
+ ESP_LOGVV(TAG, "reset_device");
40
+ uint8_t device_reset_cmd = 0xf0;
41
+ uint8_t response;
42
+ if (this->write(&device_reset_cmd, 1) != i2c::ERROR_OK) {
43
+ return false;
44
+ }
45
+ if (!this->wait_for_completion_()) {
46
+ ESP_LOGE(TAG, "reset_device: can't complete");
47
+ return false;
48
+ }
49
+ uint8_t config = (this->active_pullup_ ? 1 : 0) | (this->strong_pullup_ ? 4 : 0);
50
+ uint8_t write_config[2] = {0xd2, (uint8_t) (config | (~config << 4))};
51
+ if (this->write(write_config, 2) != i2c::ERROR_OK) {
52
+ ESP_LOGE(TAG, "reset_device: can't write config");
53
+ return false;
54
+ }
55
+ if (this->read(&response, 1) != i2c::ERROR_OK) {
56
+ ESP_LOGE(TAG, "can't read read8 response");
57
+ return false;
58
+ }
59
+ if (response != (write_config[1] & 0xf)) {
60
+ ESP_LOGE(TAG, "configuration didn't update");
61
+ return false;
62
+ }
63
+ return true;
64
+ };
65
+
66
+ int DS2484OneWireBus::reset_int() {
67
+ ESP_LOGVV(TAG, "reset");
68
+ uint8_t reset_cmd = 0xb4;
69
+ if (this->write(&reset_cmd, 1) != i2c::ERROR_OK) {
70
+ return -1;
71
+ }
72
+ return this->wait_for_completion_() ? 1 : 0;
73
+ };
74
+
75
+ void DS2484OneWireBus::write8_(uint8_t value) {
76
+ uint8_t buffer[2] = {0xa5, value};
77
+ this->write(buffer, 2);
78
+ this->wait_for_completion_();
79
+ };
80
+
81
+ void DS2484OneWireBus::write8(uint8_t value) {
82
+ ESP_LOGVV(TAG, "write8: %02x", value);
83
+ this->write8_(value);
84
+ };
85
+
86
+ void DS2484OneWireBus::write64(uint64_t value) {
87
+ ESP_LOGVV(TAG, "write64: %llx", value);
88
+ for (uint8_t i = 0; i < 8; i++) {
89
+ this->write8_((value >> (i * 8)) & 0xff);
90
+ }
91
+ }
92
+
93
+ uint8_t DS2484OneWireBus::read8() {
94
+ uint8_t read8_cmd = 0x96;
95
+ uint8_t set_read_reg_cmd[2] = {0xe1, 0xe1};
96
+ uint8_t response = 0;
97
+ if (this->write(&read8_cmd, 1) != i2c::ERROR_OK) {
98
+ ESP_LOGE(TAG, "can't write read8 cmd");
99
+ return 0;
100
+ }
101
+ this->wait_for_completion_();
102
+ if (this->write(set_read_reg_cmd, 2) != i2c::ERROR_OK) {
103
+ ESP_LOGE(TAG, "can't set read data reg");
104
+ return 0;
105
+ }
106
+ if (this->read(&response, 1) != i2c::ERROR_OK) {
107
+ ESP_LOGE(TAG, "can't read read8 response");
108
+ return 0;
109
+ }
110
+ return response;
111
+ }
112
+
113
+ uint64_t DS2484OneWireBus::read64() {
114
+ uint8_t response = 0;
115
+ for (uint8_t i = 0; i < 8; i++) {
116
+ response |= (this->read8() << (i * 8));
117
+ }
118
+ return response;
119
+ }
120
+
121
+ void DS2484OneWireBus::reset_search() {
122
+ this->last_discrepancy_ = 0;
123
+ this->last_device_flag_ = false;
124
+ this->address_ = 0;
125
+ }
126
+
127
+ bool DS2484OneWireBus::one_wire_triple_(bool *branch, bool *id_bit, bool *cmp_id_bit) {
128
+ uint8_t buffer[2] = {(uint8_t) 0x78, (uint8_t) (*branch ? 0x80u : 0)};
129
+ uint8_t status;
130
+ if (!this->read_status_(&status)) {
131
+ ESP_LOGE(TAG, "one_wire_triple start: read status error");
132
+ return false;
133
+ }
134
+ if (this->write(buffer, 2) != i2c::ERROR_OK) {
135
+ ESP_LOGV(TAG, "one_wire_triple: can't write cmd");
136
+ return false;
137
+ }
138
+ if (!this->read_status_(&status)) {
139
+ ESP_LOGE(TAG, "one_wire_triple: read status error");
140
+ return false;
141
+ }
142
+ *id_bit = bool(status & 0x20);
143
+ *cmp_id_bit = bool(status & 0x40);
144
+ *branch = bool(status & 0x80);
145
+ return true;
146
+ }
147
+
148
+ uint64_t IRAM_ATTR DS2484OneWireBus::search_int() {
149
+ ESP_LOGVV(TAG, "search_int");
150
+ if (this->last_device_flag_) {
151
+ ESP_LOGVV(TAG, "last device flag set, quitting");
152
+ return 0u;
153
+ }
154
+
155
+ uint8_t last_zero = 0;
156
+ uint64_t bit_mask = 1;
157
+ uint64_t address = this->address_;
158
+
159
+ // Initiate search
160
+ for (uint8_t bit_number = 1; bit_number <= 64; bit_number++, bit_mask <<= 1) {
161
+ bool branch;
162
+
163
+ // compute branch value for the case when there is a discrepancy
164
+ // (there are devices with both 0s and 1s at this bit)
165
+ if (bit_number < this->last_discrepancy_) {
166
+ branch = (address & bit_mask) > 0;
167
+ } else {
168
+ branch = bit_number == this->last_discrepancy_;
169
+ }
170
+
171
+ bool id_bit, cmp_id_bit;
172
+ bool branch_before = branch;
173
+ if (!this->one_wire_triple_(&branch, &id_bit, &cmp_id_bit)) {
174
+ ESP_LOGW(TAG, "one wire triple error, quitting");
175
+ return 0;
176
+ }
177
+
178
+ if (id_bit && cmp_id_bit) {
179
+ ESP_LOGW(TAG, "no devices on the bus, quitting");
180
+ // No devices participating in search
181
+ return 0;
182
+ }
183
+
184
+ if (!id_bit && !cmp_id_bit && !branch) {
185
+ last_zero = bit_number;
186
+ }
187
+
188
+ ESP_LOGVV(TAG, "%d %d branch: %d %d", id_bit, cmp_id_bit, branch_before, branch);
189
+
190
+ if (branch) {
191
+ address |= bit_mask;
192
+ } else {
193
+ address &= ~bit_mask;
194
+ }
195
+ }
196
+ ESP_LOGVV(TAG, "last_discepancy: %d", last_zero);
197
+ ESP_LOGVV(TAG, "address: %llx", address);
198
+ this->last_discrepancy_ = last_zero;
199
+ if (this->last_discrepancy_ == 0) {
200
+ // we're at root and have no choices left, so this was the last one.
201
+ this->last_device_flag_ = true;
202
+ }
203
+
204
+ this->address_ = address;
205
+ return address;
206
+ }
207
+
208
+ } // namespace ds2484
209
+ } // namespace esphome
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include "esphome/core/component.h"
4
+ #include "esphome/core/hal.h"
5
+ #include "esphome/core/preferences.h"
6
+ #include "esphome/components/i2c/i2c.h"
7
+ #include "esphome/components/one_wire/one_wire.h"
8
+
9
+ namespace esphome {
10
+ namespace ds2484 {
11
+
12
+ class DS2484OneWireBus : public one_wire::OneWireBus, public i2c::I2CDevice, public Component {
13
+ public:
14
+ void setup() override;
15
+ void dump_config() override;
16
+ float get_setup_priority() const override { return setup_priority::BUS - 1.0; }
17
+
18
+ bool reset_device();
19
+ int reset_int() override;
20
+ void write8(uint8_t) override;
21
+ void write64(uint64_t) override;
22
+ uint8_t read8() override;
23
+ uint64_t read64() override;
24
+
25
+ void set_active_pullup(bool value) { this->active_pullup_ = value; }
26
+ void set_strong_pullup(bool value) { this->strong_pullup_ = value; }
27
+
28
+ protected:
29
+ void reset_search() override;
30
+ uint64_t search_int() override;
31
+ bool read_status_(uint8_t *);
32
+ bool wait_for_completion_();
33
+ void write8_(uint8_t);
34
+ bool one_wire_triple_(bool *branch, bool *id_bit, bool *cmp_id_bit);
35
+
36
+ uint64_t address_;
37
+ uint8_t last_discrepancy_{0};
38
+ bool last_device_flag_{false};
39
+ bool active_pullup_{false};
40
+ bool strong_pullup_{false};
41
+ };
42
+ } // namespace ds2484
43
+ } // namespace esphome
@@ -0,0 +1,37 @@
1
+ import esphome.codegen as cg
2
+ from esphome.components import i2c
3
+ from esphome.components.one_wire import OneWireBus
4
+ import esphome.config_validation as cv
5
+ from esphome.const import CONF_ID
6
+
7
+ ds2484_ns = cg.esphome_ns.namespace("ds2484")
8
+
9
+ CONF_ACTIVE_PULLUP = "active_pullup"
10
+ CONF_STRONG_PULLUP = "strong_pullup"
11
+
12
+ CODEOWNERS = ["@mrk-its"]
13
+ DEPENDENCIES = ["i2c"]
14
+
15
+ DS2484OneWireBus = ds2484_ns.class_(
16
+ "DS2484OneWireBus", OneWireBus, i2c.I2CDevice, cg.Component
17
+ )
18
+
19
+ CONFIG_SCHEMA = (
20
+ cv.Schema(
21
+ {
22
+ cv.GenerateID(): cv.declare_id(DS2484OneWireBus),
23
+ cv.Optional(CONF_ACTIVE_PULLUP, default=False): cv.boolean,
24
+ cv.Optional(CONF_STRONG_PULLUP, default=False): cv.boolean,
25
+ }
26
+ )
27
+ .extend(cv.COMPONENT_SCHEMA)
28
+ .extend(i2c.i2c_device_schema(0x18))
29
+ )
30
+
31
+
32
+ async def to_code(config):
33
+ var = cg.new_Pvariable(config[CONF_ID])
34
+ await i2c.register_i2c_device(var, config)
35
+ await cg.register_component(var, config)
36
+ cg.add(var.set_active_pullup(config[CONF_ACTIVE_PULLUP]))
37
+ cg.add(var.set_strong_pullup(config[CONF_STRONG_PULLUP]))
@@ -19,7 +19,6 @@ class DutyTimeSensor : public sensor::Sensor, public PollingComponent {
19
19
  void update() override;
20
20
  void loop() override;
21
21
  void dump_config() override;
22
- float get_setup_priority() const override { return setup_priority::DATA; }
23
22
 
24
23
  void start();
25
24
  void stop();
@@ -18,7 +18,6 @@ class ENS160Component : public PollingComponent, public sensor::Sensor {
18
18
  void setup() override;
19
19
  void update() override;
20
20
  void dump_config() override;
21
- float get_setup_priority() const override { return setup_priority::DATA; }
22
21
 
23
22
  protected:
24
23
  void send_env_data_();
@@ -25,7 +25,6 @@ class ES7210 : public audio_adc::AudioAdc, public Component, public i2c::I2CDevi
25
25
  */
26
26
  public:
27
27
  void setup() override;
28
- float get_setup_priority() const override { return setup_priority::DATA; }
29
28
  void dump_config() override;
30
29
 
31
30
  void set_bits_per_sample(ES7210BitsPerSample bits_per_sample) { this->bits_per_sample_ = bits_per_sample; }
@@ -14,7 +14,6 @@ class ES7243E : public audio_adc::AudioAdc, public Component, public i2c::I2CDev
14
14
  */
15
15
  public:
16
16
  void setup() override;
17
- float get_setup_priority() const override { return setup_priority::DATA; }
18
17
  void dump_config() override;
19
18
 
20
19
  bool set_mic_gain(float mic_gain) override;
@@ -14,7 +14,6 @@ class ES8156 : public audio_dac::AudioDac, public Component, public i2c::I2CDevi
14
14
  /////////////////////////
15
15
 
16
16
  void setup() override;
17
- float get_setup_priority() const override { return setup_priority::DATA; }
18
17
  void dump_config() override;
19
18
 
20
19
  ////////////////////////