esphome 2025.4.2__py3-none-any.whl → 2025.5.0b3__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 (440) hide show
  1. esphome/__main__.py +16 -14
  2. esphome/components/ac_dimmer/ac_dimmer.cpp +3 -2
  3. esphome/components/adc/__init__.py +51 -34
  4. esphome/components/airthings_wave_base/__init__.py +1 -1
  5. esphome/components/alarm_control_panel/__init__.py +37 -2
  6. esphome/components/am43/cover/__init__.py +4 -5
  7. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +6 -4
  8. esphome/components/analog_threshold/analog_threshold_binary_sensor.h +4 -5
  9. esphome/components/analog_threshold/binary_sensor.py +10 -8
  10. esphome/components/anova/climate.py +4 -5
  11. esphome/components/api/__init__.py +25 -8
  12. esphome/components/api/api_connection.cpp +81 -13
  13. esphome/components/api/api_connection.h +13 -1
  14. esphome/components/api/api_frame_helper.cpp +232 -177
  15. esphome/components/api/api_frame_helper.h +61 -8
  16. esphome/components/api/api_noise_context.h +13 -4
  17. esphome/components/api/api_pb2.cpp +1422 -1
  18. esphome/components/api/api_pb2.h +255 -1
  19. esphome/components/api/api_pb2_service.cpp +162 -49
  20. esphome/components/api/api_pb2_service.h +90 -51
  21. esphome/components/api/api_pb2_size.h +361 -0
  22. esphome/components/api/api_server.cpp +110 -34
  23. esphome/components/api/api_server.h +8 -0
  24. esphome/components/api/proto.h +86 -17
  25. esphome/components/as7341/as7341.h +1 -1
  26. esphome/components/atm90e32/__init__.py +1 -0
  27. esphome/components/atm90e32/atm90e32.cpp +576 -199
  28. esphome/components/atm90e32/atm90e32.h +128 -31
  29. esphome/components/atm90e32/atm90e32_reg.h +4 -2
  30. esphome/components/atm90e32/button/__init__.py +62 -10
  31. esphome/components/atm90e32/button/atm90e32_button.cpp +63 -4
  32. esphome/components/atm90e32/button/atm90e32_button.h +36 -4
  33. esphome/components/atm90e32/number/__init__.py +130 -0
  34. esphome/components/atm90e32/number/atm90e32_number.h +16 -0
  35. esphome/components/atm90e32/sensor.py +21 -4
  36. esphome/components/atm90e32/text_sensor/__init__.py +48 -0
  37. esphome/components/audio/__init__.py +96 -49
  38. esphome/components/audio/audio.h +48 -0
  39. esphome/components/audio/audio_decoder.cpp +1 -1
  40. esphome/components/audio/audio_resampler.cpp +2 -0
  41. esphome/components/audio/audio_resampler.h +1 -0
  42. esphome/components/ballu/climate.py +2 -9
  43. esphome/components/bang_bang/climate.py +5 -6
  44. esphome/components/bedjet/bedjet_hub.cpp +1 -0
  45. esphome/components/bedjet/climate/__init__.py +3 -8
  46. esphome/components/bedjet/fan/__init__.py +2 -11
  47. esphome/components/binary/fan/__init__.py +13 -16
  48. esphome/components/binary_sensor/__init__.py +13 -10
  49. esphome/components/bl0906/constants.h +16 -16
  50. esphome/components/ble_client/text_sensor/__init__.py +3 -5
  51. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +4 -6
  52. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +136 -21
  53. esphome/components/bluetooth_proxy/bluetooth_proxy.h +7 -0
  54. esphome/components/button/__init__.py +11 -8
  55. esphome/components/canbus/canbus.cpp +3 -0
  56. esphome/components/canbus/canbus.h +16 -0
  57. esphome/components/ccs811/sensor.py +9 -6
  58. esphome/components/climate/__init__.py +35 -2
  59. esphome/components/climate/climate_mode.h +1 -1
  60. esphome/components/climate/climate_traits.h +63 -57
  61. esphome/components/climate_ir/__init__.py +57 -17
  62. esphome/components/climate_ir_lg/climate.py +2 -5
  63. esphome/components/climate_ir_lg/climate_ir_lg.cpp +7 -7
  64. esphome/components/climate_ir_lg/climate_ir_lg.h +1 -1
  65. esphome/components/color/__init__.py +2 -0
  66. esphome/components/const/__init__.py +5 -0
  67. esphome/components/coolix/climate.py +2 -9
  68. esphome/components/copy/cover/__init__.py +10 -9
  69. esphome/components/copy/fan/__init__.py +11 -9
  70. esphome/components/copy/lock/__init__.py +11 -9
  71. esphome/components/copy/text/__init__.py +9 -6
  72. esphome/components/cover/__init__.py +37 -2
  73. esphome/components/cse7766/cse7766.cpp +2 -1
  74. esphome/components/cst226/binary_sensor/__init__.py +28 -0
  75. esphome/components/cst226/binary_sensor/cs226_button.h +22 -0
  76. esphome/components/cst226/binary_sensor/cstt6_button.cpp +19 -0
  77. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +27 -5
  78. esphome/components/cst226/touchscreen/cst226_touchscreen.h +10 -10
  79. esphome/components/current_based/cover.py +37 -36
  80. esphome/components/current_based/current_based_cover.cpp +2 -1
  81. esphome/components/daikin/climate.py +2 -9
  82. esphome/components/daikin/daikin.cpp +15 -9
  83. esphome/components/daikin/daikin.h +5 -5
  84. esphome/components/daikin_arc/climate.py +2 -7
  85. esphome/components/daikin_brc/climate.py +3 -5
  86. esphome/components/dallas_temp/dallas_temp.cpp +17 -24
  87. esphome/components/dallas_temp/dallas_temp.h +0 -1
  88. esphome/components/daly_bms/daly_bms.cpp +2 -1
  89. esphome/components/debug/debug_component.cpp +6 -1
  90. esphome/components/debug/debug_component.h +6 -0
  91. esphome/components/debug/debug_esp32.cpp +109 -254
  92. esphome/components/debug/sensor.py +14 -0
  93. esphome/components/deep_sleep/deep_sleep_esp32.cpp +13 -1
  94. esphome/components/delonghi/climate.py +2 -9
  95. esphome/components/demo/__init__.py +18 -20
  96. esphome/components/dfrobot_sen0395/switch/__init__.py +21 -22
  97. esphome/components/dps310/sensor.py +6 -6
  98. esphome/components/ee895/sensor.py +9 -9
  99. esphome/components/emmeti/climate.py +2 -9
  100. esphome/components/endstop/cover.py +17 -16
  101. esphome/components/endstop/endstop_cover.cpp +2 -1
  102. esphome/components/ens160_base/__init__.py +12 -9
  103. esphome/components/esp32/__init__.py +60 -3
  104. esphome/components/esp32/core.cpp +11 -5
  105. esphome/components/esp32/gpio.cpp +86 -24
  106. esphome/components/esp32/gpio.py +15 -16
  107. esphome/components/esp32/gpio_esp32.py +1 -2
  108. esphome/components/esp32/gpio_esp32_c2.py +1 -1
  109. esphome/components/esp32/gpio_esp32_c3.py +1 -1
  110. esphome/components/esp32/gpio_esp32_c6.py +1 -1
  111. esphome/components/esp32/gpio_esp32_h2.py +1 -1
  112. esphome/components/esp32_ble/ble.cpp +1 -0
  113. esphome/components/esp32_ble/ble.h +5 -3
  114. esphome/components/esp32_ble/ble_advertising.cpp +2 -1
  115. esphome/components/esp32_ble/ble_advertising.h +1 -0
  116. esphome/components/esp32_ble_server/__init__.py +3 -0
  117. esphome/components/esp32_ble_tracker/__init__.py +7 -1
  118. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +192 -118
  119. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +29 -3
  120. esphome/components/esp32_camera/esp32_camera.cpp +2 -1
  121. esphome/components/esp32_camera/esp32_camera.h +1 -1
  122. esphome/components/esp32_can/esp32_can.cpp +1 -1
  123. esphome/components/esp32_improv/esp32_improv_component.cpp +1 -1
  124. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -1
  125. esphome/components/esp32_rmt_led_strip/led_strip.h +7 -5
  126. esphome/components/esp32_rmt_led_strip/light.py +9 -1
  127. esphome/components/esp32_touch/esp32_touch.cpp +1 -1
  128. esphome/components/esp8266/gpio.cpp +69 -8
  129. esphome/components/ethernet/ethernet_component.cpp +1 -1
  130. esphome/components/event/__init__.py +13 -10
  131. esphome/components/factory_reset/switch/__init__.py +7 -21
  132. esphome/components/fan/__init__.py +52 -5
  133. esphome/components/fastled_base/__init__.py +1 -4
  134. esphome/components/fastled_base/fastled_light.cpp +1 -1
  135. esphome/components/feedback/cover.py +38 -33
  136. esphome/components/feedback/feedback_cover.cpp +2 -1
  137. esphome/components/fujitsu_general/climate.py +2 -9
  138. esphome/components/gcja5/gcja5.cpp +2 -1
  139. esphome/components/gpio/one_wire/gpio_one_wire.cpp +45 -43
  140. esphome/components/gpio/one_wire/gpio_one_wire.h +2 -1
  141. esphome/components/gpio_expander/cached_gpio.h +22 -7
  142. esphome/components/gps/__init__.py +47 -17
  143. esphome/components/gps/gps.cpp +42 -23
  144. esphome/components/gps/gps.h +17 -13
  145. esphome/components/graph/__init__.py +1 -2
  146. esphome/components/gree/climate.py +4 -6
  147. esphome/components/gree/gree.cpp +16 -2
  148. esphome/components/gree/gree.h +2 -2
  149. esphome/components/growatt_solar/growatt_solar.cpp +2 -1
  150. esphome/components/haier/climate.py +37 -34
  151. esphome/components/hbridge/fan/__init__.py +19 -17
  152. esphome/components/he60r/cover.py +4 -5
  153. esphome/components/heatpumpir/climate.py +3 -6
  154. esphome/components/hitachi_ac344/climate.py +2 -9
  155. esphome/components/hitachi_ac424/climate.py +2 -9
  156. esphome/components/hm3301/hm3301.h +1 -1
  157. esphome/components/hte501/sensor.py +6 -6
  158. esphome/components/http_request/__init__.py +39 -6
  159. esphome/components/http_request/http_request.cpp +20 -0
  160. esphome/components/http_request/http_request.h +57 -15
  161. esphome/components/http_request/http_request_arduino.cpp +22 -6
  162. esphome/components/http_request/http_request_arduino.h +4 -3
  163. esphome/components/http_request/http_request_host.cpp +141 -0
  164. esphome/components/http_request/http_request_host.h +37 -0
  165. esphome/components/http_request/http_request_idf.cpp +35 -3
  166. esphome/components/http_request/http_request_idf.h +10 -3
  167. esphome/components/http_request/httplib.h +9691 -0
  168. esphome/components/http_request/update/__init__.py +11 -8
  169. esphome/components/hyt271/sensor.py +6 -6
  170. esphome/components/i2c/i2c.h +4 -0
  171. esphome/components/i2c/i2c_bus_esp_idf.cpp +1 -1
  172. esphome/components/i2s_audio/__init__.py +131 -22
  173. esphome/components/i2s_audio/i2s_audio.h +44 -4
  174. esphome/components/i2s_audio/media_player/__init__.py +19 -9
  175. esphome/components/i2s_audio/microphone/__init__.py +63 -5
  176. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +351 -61
  177. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +40 -6
  178. esphome/components/i2s_audio/speaker/__init__.py +31 -5
  179. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +155 -19
  180. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +17 -4
  181. esphome/components/ili9xxx/ili9xxx_init.h +1 -1
  182. esphome/components/image/__init__.py +37 -17
  183. esphome/components/image/image.cpp +25 -8
  184. esphome/components/internal_temperature/internal_temperature.cpp +6 -4
  185. esphome/components/key_collector/__init__.py +35 -0
  186. esphome/components/key_collector/key_collector.cpp +8 -0
  187. esphome/components/key_collector/key_collector.h +10 -0
  188. esphome/components/kuntze/kuntze.cpp +2 -1
  189. esphome/components/ld2410/ld2410.h +1 -1
  190. esphome/components/ld2450/ld2450.h +1 -1
  191. esphome/components/light/__init__.py +57 -0
  192. esphome/components/lock/__init__.py +51 -4
  193. esphome/components/lock/automation.h +2 -13
  194. esphome/components/logger/__init__.py +22 -0
  195. esphome/components/logger/logger.cpp +154 -103
  196. esphome/components/logger/logger.h +211 -36
  197. esphome/components/logger/task_log_buffer.cpp +138 -0
  198. esphome/components/logger/task_log_buffer.h +69 -0
  199. esphome/components/lvgl/__init__.py +13 -5
  200. esphome/components/lvgl/automation.py +50 -1
  201. esphome/components/lvgl/defines.py +0 -1
  202. esphome/components/lvgl/lvgl_esphome.cpp +5 -1
  203. esphome/components/lvgl/text/__init__.py +1 -2
  204. esphome/components/mapping/__init__.py +134 -0
  205. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -1
  206. esphome/components/max7219digit/max7219digit.cpp +28 -27
  207. esphome/components/mdns/__init__.py +11 -5
  208. esphome/components/mdns/mdns_component.cpp +11 -5
  209. esphome/components/mdns/mdns_component.h +3 -2
  210. esphome/components/mdns/mdns_esp32.cpp +4 -3
  211. esphome/components/mdns/mdns_esp8266.cpp +4 -2
  212. esphome/components/mdns/mdns_libretiny.cpp +4 -2
  213. esphome/components/mdns/mdns_rp2040.cpp +4 -2
  214. esphome/components/media_player/__init__.py +33 -1
  215. esphome/components/mhz19/sensor.py +11 -7
  216. esphome/components/micro_wake_word/__init__.py +99 -31
  217. esphome/components/micro_wake_word/automation.h +54 -0
  218. esphome/components/micro_wake_word/micro_wake_word.cpp +331 -319
  219. esphome/components/micro_wake_word/micro_wake_word.h +58 -105
  220. esphome/components/micro_wake_word/preprocessor_settings.h +19 -2
  221. esphome/components/micro_wake_word/streaming_model.cpp +158 -41
  222. esphome/components/micro_wake_word/streaming_model.h +85 -13
  223. esphome/components/microphone/__init__.py +139 -9
  224. esphome/components/microphone/automation.h +14 -2
  225. esphome/components/microphone/microphone.cpp +21 -0
  226. esphome/components/microphone/microphone.h +14 -5
  227. esphome/components/microphone/microphone_source.cpp +95 -0
  228. esphome/components/microphone/microphone_source.h +80 -0
  229. esphome/components/mics_4514/sensor.py +25 -14
  230. esphome/components/midea/climate.py +3 -4
  231. esphome/components/midea_ir/climate.py +3 -5
  232. esphome/components/mipi_spi/__init__.py +15 -0
  233. esphome/components/mipi_spi/display.py +474 -0
  234. esphome/components/mipi_spi/mipi_spi.cpp +481 -0
  235. esphome/components/mipi_spi/mipi_spi.h +171 -0
  236. esphome/components/mipi_spi/models/__init__.py +65 -0
  237. esphome/components/mipi_spi/models/amoled.py +72 -0
  238. esphome/components/mipi_spi/models/commands.py +82 -0
  239. esphome/components/mipi_spi/models/cyd.py +10 -0
  240. esphome/components/mipi_spi/models/ili.py +749 -0
  241. esphome/components/mipi_spi/models/jc.py +260 -0
  242. esphome/components/mipi_spi/models/lanbon.py +15 -0
  243. esphome/components/mipi_spi/models/lilygo.py +60 -0
  244. esphome/components/mipi_spi/models/waveshare.py +139 -0
  245. esphome/components/mitsubishi/climate.py +2 -5
  246. esphome/components/mitsubishi/mitsubishi.cpp +9 -9
  247. esphome/components/mixer/speaker/mixer_speaker.cpp +12 -22
  248. esphome/components/mixer/speaker/mixer_speaker.h +1 -3
  249. esphome/components/mlx90393/sensor.py +5 -0
  250. esphome/components/mlx90393/sensor_mlx90393.cpp +195 -13
  251. esphome/components/mlx90393/sensor_mlx90393.h +21 -4
  252. esphome/components/modbus/modbus.cpp +2 -1
  253. esphome/components/mqtt/__init__.py +1 -1
  254. esphome/components/mqtt/mqtt_client.cpp +6 -2
  255. esphome/components/mqtt/mqtt_const.h +4 -0
  256. esphome/components/mqtt/mqtt_fan.cpp +39 -0
  257. esphome/components/mqtt/mqtt_fan.h +2 -0
  258. esphome/components/ms5611/sensor.py +6 -6
  259. esphome/components/ms8607/sensor.py +3 -3
  260. esphome/components/network/__init__.py +1 -1
  261. esphome/components/nextion/base_component.py +17 -16
  262. esphome/components/nextion/display.py +11 -2
  263. esphome/components/nextion/nextion.cpp +39 -1
  264. esphome/components/nextion/nextion.h +50 -0
  265. esphome/components/noblex/climate.py +2 -9
  266. esphome/components/number/__init__.py +12 -9
  267. esphome/components/one_wire/one_wire_bus.cpp +14 -10
  268. esphome/components/one_wire/one_wire_bus.h +14 -8
  269. esphome/components/online_image/bmp_image.cpp +48 -11
  270. esphome/components/online_image/bmp_image.h +2 -0
  271. esphome/components/opentherm/binary_sensor/__init__.py +2 -4
  272. esphome/components/opentherm/number/__init__.py +11 -20
  273. esphome/components/opentherm/sensor/__init__.py +3 -3
  274. esphome/components/opentherm/switch/__init__.py +3 -5
  275. esphome/components/output/lock/__init__.py +11 -9
  276. esphome/components/packages/__init__.py +33 -31
  277. esphome/components/packet_transport/__init__.py +201 -0
  278. esphome/components/packet_transport/binary_sensor.py +19 -0
  279. esphome/components/packet_transport/packet_transport.cpp +534 -0
  280. esphome/components/packet_transport/packet_transport.h +154 -0
  281. esphome/components/packet_transport/sensor.py +19 -0
  282. esphome/components/pca9685/pca9685_output.cpp +2 -1
  283. esphome/components/pid/climate.py +2 -4
  284. esphome/components/pm2005/__init__.py +1 -0
  285. esphome/components/pm2005/pm2005.cpp +123 -0
  286. esphome/components/pm2005/pm2005.h +46 -0
  287. esphome/components/pm2005/sensor.py +86 -0
  288. esphome/components/pmsa003i/pmsa003i.cpp +43 -16
  289. esphome/components/pmsa003i/pmsa003i.h +25 -25
  290. esphome/components/pmsx003/pmsx003.cpp +195 -230
  291. esphome/components/pmsx003/pmsx003.h +51 -33
  292. esphome/components/pmsx003/sensor.py +21 -11
  293. esphome/components/pn7150/pn7150.h +2 -2
  294. esphome/components/pn7160/pn7160.h +2 -2
  295. esphome/components/prometheus/prometheus_handler.cpp +174 -0
  296. esphome/components/prometheus/prometheus_handler.h +17 -0
  297. esphome/components/psram/__init__.py +7 -5
  298. esphome/components/pulse_meter/pulse_meter_sensor.cpp +32 -12
  299. esphome/components/pulse_meter/pulse_meter_sensor.h +5 -5
  300. esphome/components/pzem004t/pzem004t.cpp +2 -1
  301. esphome/components/qspi_dbi/__init__.py +0 -1
  302. esphome/components/qspi_dbi/display.py +2 -1
  303. esphome/components/qspi_dbi/models.py +1 -2
  304. esphome/components/remote_base/__init__.py +91 -0
  305. esphome/components/remote_base/beo4_protocol.cpp +153 -0
  306. esphome/components/remote_base/beo4_protocol.h +43 -0
  307. esphome/components/remote_base/gobox_protocol.cpp +131 -0
  308. esphome/components/remote_base/gobox_protocol.h +54 -0
  309. esphome/components/remote_receiver/remote_receiver_esp32.cpp +16 -9
  310. esphome/components/resampler/speaker/resampler_speaker.cpp +12 -10
  311. esphome/components/resampler/speaker/resampler_speaker.h +1 -1
  312. esphome/components/rf_bridge/rf_bridge.cpp +2 -1
  313. esphome/components/scd30/sensor.py +2 -3
  314. esphome/components/scd4x/sensor.py +4 -5
  315. esphome/components/sdp3x/sensor.py +2 -1
  316. esphome/components/sds011/sds011.cpp +2 -1
  317. esphome/components/select/__init__.py +19 -20
  318. esphome/components/sen5x/sen5x.cpp +55 -36
  319. esphome/components/sen5x/sensor.py +1 -1
  320. esphome/components/senseair/sensor.py +3 -3
  321. esphome/components/sensor/__init__.py +158 -14
  322. esphome/components/sensor/filter.cpp +23 -0
  323. esphome/components/sensor/filter.h +22 -0
  324. esphome/components/sgp30/sensor.py +14 -16
  325. esphome/components/sgp4x/sensor.py +1 -1
  326. esphome/components/sht4x/sht4x.cpp +43 -22
  327. esphome/components/sht4x/sht4x.h +1 -1
  328. esphome/components/shtcx/sensor.py +6 -6
  329. esphome/components/slow_pwm/slow_pwm_output.cpp +2 -1
  330. esphome/components/sml/text_sensor/__init__.py +4 -6
  331. esphome/components/sound_level/__init__.py +0 -0
  332. esphome/components/sound_level/sensor.py +97 -0
  333. esphome/components/sound_level/sound_level.cpp +194 -0
  334. esphome/components/sound_level/sound_level.h +73 -0
  335. esphome/components/speaker/media_player/__init__.py +4 -8
  336. esphome/components/speaker/media_player/speaker_media_player.cpp +0 -18
  337. esphome/components/speaker/media_player/speaker_media_player.h +0 -11
  338. esphome/components/speaker/speaker.h +4 -7
  339. esphome/components/speed/fan/__init__.py +17 -16
  340. esphome/components/spi/spi.h +11 -1
  341. esphome/components/sprinkler/__init__.py +18 -19
  342. esphome/components/sprinkler/sprinkler.cpp +6 -5
  343. esphome/components/switch/__init__.py +32 -42
  344. esphome/components/syslog/__init__.py +41 -0
  345. esphome/components/syslog/esphome_syslog.cpp +49 -0
  346. esphome/components/syslog/esphome_syslog.h +27 -0
  347. esphome/components/t6615/sensor.py +3 -3
  348. esphome/components/t6615/t6615.cpp +2 -1
  349. esphome/components/tca9555/tca9555.cpp +11 -6
  350. esphome/components/tcl112/climate.py +2 -9
  351. esphome/components/template/alarm_control_panel/__init__.py +7 -6
  352. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +21 -17
  353. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +2 -1
  354. esphome/components/template/cover/__init__.py +27 -21
  355. esphome/components/template/fan/__init__.py +14 -12
  356. esphome/components/template/lock/__init__.py +20 -25
  357. esphome/components/template/lock/automation.h +18 -0
  358. esphome/components/template/text/__init__.py +4 -3
  359. esphome/components/template/valve/__init__.py +32 -21
  360. esphome/components/template/valve/automation.h +24 -0
  361. esphome/components/text/__init__.py +32 -1
  362. esphome/components/text_sensor/__init__.py +24 -29
  363. esphome/components/thermostat/climate.py +5 -5
  364. esphome/components/time_based/cover.py +17 -16
  365. esphome/components/time_based/time_based_cover.cpp +2 -1
  366. esphome/components/tm1638/switch/__init__.py +10 -7
  367. esphome/components/tormatic/cover.py +4 -5
  368. esphome/components/toshiba/climate.py +3 -5
  369. esphome/components/touchscreen/touchscreen.cpp +3 -1
  370. esphome/components/tuya/climate/__init__.py +5 -6
  371. esphome/components/tuya/cover/__init__.py +6 -11
  372. esphome/components/tuya/select/__init__.py +15 -5
  373. esphome/components/tuya/select/tuya_select.cpp +6 -1
  374. esphome/components/tuya/select/tuya_select.h +5 -1
  375. esphome/components/uart/packet_transport/__init__.py +20 -0
  376. esphome/components/uart/packet_transport/uart_transport.cpp +88 -0
  377. esphome/components/uart/packet_transport/uart_transport.h +41 -0
  378. esphome/components/uart/switch/uart_switch.cpp +2 -1
  379. esphome/components/udp/__init__.py +126 -128
  380. esphome/components/udp/automation.h +40 -0
  381. esphome/components/udp/binary_sensor.py +3 -25
  382. esphome/components/udp/packet_transport/__init__.py +29 -0
  383. esphome/components/udp/packet_transport/udp_transport.cpp +36 -0
  384. esphome/components/udp/packet_transport/udp_transport.h +28 -0
  385. esphome/components/udp/sensor.py +3 -25
  386. esphome/components/udp/udp_component.cpp +26 -470
  387. esphome/components/udp/udp_component.h +21 -128
  388. esphome/components/update/__init__.py +31 -1
  389. esphome/components/uponor_smatrix/climate/__init__.py +4 -9
  390. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +2 -1
  391. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  392. esphome/components/uptime/text_sensor/__init__.py +47 -7
  393. esphome/components/uptime/text_sensor/uptime_text_sensor.cpp +12 -7
  394. esphome/components/uptime/text_sensor/uptime_text_sensor.h +19 -0
  395. esphome/components/valve/__init__.py +34 -3
  396. esphome/components/valve/automation.h +1 -19
  397. esphome/components/vl53l0x/sensor.py +11 -0
  398. esphome/components/vl53l0x/vl53l0x_sensor.cpp +5 -1
  399. esphome/components/vl53l0x/vl53l0x_sensor.h +2 -1
  400. esphome/components/voice_assistant/__init__.py +36 -10
  401. esphome/components/voice_assistant/voice_assistant.cpp +170 -144
  402. esphome/components/voice_assistant/voice_assistant.h +26 -25
  403. esphome/components/waveshare_epaper/display.py +6 -0
  404. esphome/components/waveshare_epaper/waveshare_epaper.cpp +439 -37
  405. esphome/components/waveshare_epaper/waveshare_epaper.h +60 -11
  406. esphome/components/whirlpool/climate.py +3 -5
  407. esphome/components/whynter/climate.py +3 -5
  408. esphome/components/xpt2046/touchscreen/xpt2046.cpp +1 -1
  409. esphome/components/yashima/climate.py +6 -6
  410. esphome/components/zhlt01/climate.py +2 -7
  411. esphome/config.py +13 -13
  412. esphome/config_validation.py +38 -58
  413. esphome/const.py +15 -1
  414. esphome/core/__init__.py +2 -0
  415. esphome/core/application.cpp +23 -10
  416. esphome/core/application.h +9 -1
  417. esphome/core/automation.h +4 -3
  418. esphome/core/component.cpp +28 -7
  419. esphome/core/component.h +10 -1
  420. esphome/core/defines.h +23 -17
  421. esphome/core/macros.h +4 -0
  422. esphome/core/scheduler.cpp +7 -1
  423. esphome/cpp_generator.py +6 -2
  424. esphome/dashboard/web_server.py +3 -3
  425. esphome/helpers.py +39 -0
  426. esphome/loader.py +4 -0
  427. esphome/log.py +15 -19
  428. esphome/mqtt.py +23 -10
  429. esphome/platformio_api.py +1 -1
  430. esphome/schema_extractors.py +0 -1
  431. esphome/voluptuous_schema.py +3 -1
  432. esphome/vscode.py +15 -0
  433. esphome/wizard.py +47 -37
  434. esphome/zeroconf.py +7 -3
  435. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/METADATA +10 -11
  436. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/RECORD +440 -380
  437. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/WHEEL +1 -1
  438. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/entry_points.txt +0 -0
  439. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/licenses/LICENSE +0 -0
  440. {esphome-2025.4.2.dist-info → esphome-2025.5.0b3.dist-info}/top_level.txt +0 -0
@@ -1,25 +1,18 @@
1
1
  #include "debug_component.h"
2
+
2
3
  #ifdef USE_ESP32
4
+ #include "esphome/core/application.h"
3
5
  #include "esphome/core/log.h"
6
+ #include "esphome/core/hal.h"
7
+ #include <esp_sleep.h>
4
8
 
5
9
  #include <esp_heap_caps.h>
6
10
  #include <esp_system.h>
7
11
  #include <esp_chip_info.h>
8
12
  #include <esp_partition.h>
9
13
 
10
- #if defined(USE_ESP32_VARIANT_ESP32)
11
- #include <esp32/rom/rtc.h>
12
- #elif defined(USE_ESP32_VARIANT_ESP32C3)
13
- #include <esp32c3/rom/rtc.h>
14
- #elif defined(USE_ESP32_VARIANT_ESP32C6)
15
- #include <esp32c6/rom/rtc.h>
16
- #elif defined(USE_ESP32_VARIANT_ESP32S2)
17
- #include <esp32s2/rom/rtc.h>
18
- #elif defined(USE_ESP32_VARIANT_ESP32S3)
19
- #include <esp32s3/rom/rtc.h>
20
- #elif defined(USE_ESP32_VARIANT_ESP32H2)
21
- #include <esp32h2/rom/rtc.h>
22
- #endif
14
+ #include <map>
15
+
23
16
  #ifdef USE_ARDUINO
24
17
  #include <Esp.h>
25
18
  #endif
@@ -29,6 +22,90 @@ namespace debug {
29
22
 
30
23
  static const char *const TAG = "debug";
31
24
 
25
+ // index by values returned by esp_reset_reason
26
+
27
+ static const char *const RESET_REASONS[] = {
28
+ "unknown source",
29
+ "power-on event",
30
+ "external pin",
31
+ "software via esp_restart",
32
+ "exception/panic",
33
+ "interrupt watchdog",
34
+ "task watchdog",
35
+ "other watchdogs",
36
+ "exiting deep sleep mode",
37
+ "brownout",
38
+ "SDIO",
39
+ "USB peripheral",
40
+ "JTAG",
41
+ "efuse error",
42
+ "power glitch detected",
43
+ "CPU lock up",
44
+ };
45
+
46
+ static const char *const REBOOT_KEY = "reboot_source";
47
+ static const size_t REBOOT_MAX_LEN = 24;
48
+
49
+ // on shutdown, store the source of the reboot request
50
+ void DebugComponent::on_shutdown() {
51
+ auto *component = App.get_current_component();
52
+ char buffer[REBOOT_MAX_LEN]{};
53
+ auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
54
+ if (component != nullptr) {
55
+ strncpy(buffer, component->get_component_source(), REBOOT_MAX_LEN - 1);
56
+ }
57
+ ESP_LOGD(TAG, "Storing reboot source: %s", buffer);
58
+ pref.save(&buffer);
59
+ global_preferences->sync();
60
+ }
61
+
62
+ std::string DebugComponent::get_reset_reason_() {
63
+ std::string reset_reason;
64
+ unsigned reason = esp_reset_reason();
65
+ if (reason < sizeof(RESET_REASONS) / sizeof(RESET_REASONS[0])) {
66
+ reset_reason = RESET_REASONS[reason];
67
+ if (reason == ESP_RST_SW) {
68
+ auto pref = global_preferences->make_preference(REBOOT_MAX_LEN, fnv1_hash(REBOOT_KEY + App.get_name()));
69
+ char buffer[REBOOT_MAX_LEN]{};
70
+ if (pref.load(&buffer)) {
71
+ reset_reason = "Reboot request from " + std::string(buffer);
72
+ }
73
+ }
74
+ } else {
75
+ reset_reason = "unknown source";
76
+ }
77
+ ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
78
+ return reset_reason;
79
+ }
80
+
81
+ static const char *const WAKEUP_CAUSES[] = {
82
+ "undefined",
83
+ "undefined",
84
+ "external signal using RTC_IO",
85
+ "external signal using RTC_CNTL",
86
+ "timer",
87
+ "touchpad",
88
+ "ULP program",
89
+ "GPIO",
90
+ "UART",
91
+ "WIFI",
92
+ "COCPU int",
93
+ "COCPU crash",
94
+ "BT",
95
+ };
96
+
97
+ std::string DebugComponent::get_wakeup_cause_() {
98
+ const char *wake_reason;
99
+ unsigned reason = esp_sleep_get_wakeup_cause();
100
+ if (reason < sizeof(WAKEUP_CAUSES) / sizeof(WAKEUP_CAUSES[0])) {
101
+ wake_reason = WAKEUP_CAUSES[reason];
102
+ } else {
103
+ wake_reason = "unknown source";
104
+ }
105
+ ESP_LOGD(TAG, "Wakeup Reason: %s", wake_reason);
106
+ return wake_reason;
107
+ }
108
+
32
109
  void DebugComponent::log_partition_info_() {
33
110
  ESP_LOGCONFIG(TAG, "Partition table:");
34
111
  ESP_LOGCONFIG(TAG, " %-12s %-4s %-8s %-10s %-10s", "Name", "Type", "Subtype", "Address", "Size");
@@ -42,171 +119,16 @@ void DebugComponent::log_partition_info_() {
42
119
  esp_partition_iterator_release(it);
43
120
  }
44
121
 
45
- std::string DebugComponent::get_reset_reason_() {
46
- std::string reset_reason;
47
- switch (esp_reset_reason()) {
48
- case ESP_RST_POWERON:
49
- reset_reason = "Reset due to power-on event";
50
- break;
51
- case ESP_RST_EXT:
52
- reset_reason = "Reset by external pin";
53
- break;
54
- case ESP_RST_SW:
55
- reset_reason = "Software reset via esp_restart";
56
- break;
57
- case ESP_RST_PANIC:
58
- reset_reason = "Software reset due to exception/panic";
59
- break;
60
- case ESP_RST_INT_WDT:
61
- reset_reason = "Reset (software or hardware) due to interrupt watchdog";
62
- break;
63
- case ESP_RST_TASK_WDT:
64
- reset_reason = "Reset due to task watchdog";
65
- break;
66
- case ESP_RST_WDT:
67
- reset_reason = "Reset due to other watchdogs";
68
- break;
69
- case ESP_RST_DEEPSLEEP:
70
- reset_reason = "Reset after exiting deep sleep mode";
71
- break;
72
- case ESP_RST_BROWNOUT:
73
- reset_reason = "Brownout reset (software or hardware)";
74
- break;
75
- case ESP_RST_SDIO:
76
- reset_reason = "Reset over SDIO";
77
- break;
78
- #ifdef USE_ESP32_VARIANT_ESP32
79
- #if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4))
80
- case ESP_RST_USB:
81
- reset_reason = "Reset by USB peripheral";
82
- break;
83
- case ESP_RST_JTAG:
84
- reset_reason = "Reset by JTAG";
85
- break;
86
- case ESP_RST_EFUSE:
87
- reset_reason = "Reset due to efuse error";
88
- break;
89
- case ESP_RST_PWR_GLITCH:
90
- reset_reason = "Reset due to power glitch detected";
91
- break;
92
- case ESP_RST_CPU_LOCKUP:
93
- reset_reason = "Reset due to CPU lock up (double exception)";
94
- break;
95
- #endif // ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 4)
96
- #endif // USE_ESP32_VARIANT_ESP32
97
- default: // Includes ESP_RST_UNKNOWN
98
- switch (rtc_get_reset_reason(0)) {
99
- case POWERON_RESET:
100
- reset_reason = "Power On Reset";
101
- break;
102
- #if defined(USE_ESP32_VARIANT_ESP32)
103
- case SW_RESET:
104
- #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
105
- defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
106
- case RTC_SW_SYS_RESET:
107
- #endif
108
- reset_reason = "Software Reset Digital Core";
109
- break;
110
- #if defined(USE_ESP32_VARIANT_ESP32)
111
- case OWDT_RESET:
112
- reset_reason = "Watch Dog Reset Digital Core";
113
- break;
114
- #endif
115
- case DEEPSLEEP_RESET:
116
- reset_reason = "Deep Sleep Reset Digital Core";
117
- break;
118
- #if defined(USE_ESP32_VARIANT_ESP32)
119
- case SDIO_RESET:
120
- reset_reason = "SLC Module Reset Digital Core";
121
- break;
122
- #endif
123
- case TG0WDT_SYS_RESET:
124
- reset_reason = "Timer Group 0 Watch Dog Reset Digital Core";
125
- break;
126
- case TG1WDT_SYS_RESET:
127
- reset_reason = "Timer Group 1 Watch Dog Reset Digital Core";
128
- break;
129
- case RTCWDT_SYS_RESET:
130
- reset_reason = "RTC Watch Dog Reset Digital Core";
131
- break;
132
- #if !defined(USE_ESP32_VARIANT_ESP32C6) && !defined(USE_ESP32_VARIANT_ESP32H2)
133
- case INTRUSION_RESET:
134
- reset_reason = "Intrusion Reset CPU";
135
- break;
136
- #endif
137
- #if defined(USE_ESP32_VARIANT_ESP32)
138
- case TGWDT_CPU_RESET:
139
- reset_reason = "Timer Group Reset CPU";
140
- break;
141
- #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
142
- defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
143
- case TG0WDT_CPU_RESET:
144
- reset_reason = "Timer Group 0 Reset CPU";
145
- break;
146
- #endif
147
- #if defined(USE_ESP32_VARIANT_ESP32)
148
- case SW_CPU_RESET:
149
- #elif defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || \
150
- defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
151
- case RTC_SW_CPU_RESET:
152
- #endif
153
- reset_reason = "Software Reset CPU";
154
- break;
155
- case RTCWDT_CPU_RESET:
156
- reset_reason = "RTC Watch Dog Reset CPU";
157
- break;
158
- #if defined(USE_ESP32_VARIANT_ESP32)
159
- case EXT_CPU_RESET:
160
- reset_reason = "External CPU Reset";
161
- break;
162
- #endif
163
- case RTCWDT_BROWN_OUT_RESET:
164
- reset_reason = "Voltage Unstable Reset";
165
- break;
166
- case RTCWDT_RTC_RESET:
167
- reset_reason = "RTC Watch Dog Reset Digital Core And RTC Module";
168
- break;
169
- #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) || \
170
- defined(USE_ESP32_VARIANT_ESP32C6)
171
- case TG1WDT_CPU_RESET:
172
- reset_reason = "Timer Group 1 Reset CPU";
173
- break;
174
- case SUPER_WDT_RESET:
175
- reset_reason = "Super Watchdog Reset Digital Core And RTC Module";
176
- break;
177
- case EFUSE_RESET:
178
- reset_reason = "eFuse Reset Digital Core";
179
- break;
180
- #endif
181
- #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3)
182
- case GLITCH_RTC_RESET:
183
- reset_reason = "Glitch Reset Digital Core And RTC Module";
184
- break;
185
- #endif
186
- #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C6)
187
- case USB_UART_CHIP_RESET:
188
- reset_reason = "USB UART Reset Digital Core";
189
- break;
190
- case USB_JTAG_CHIP_RESET:
191
- reset_reason = "USB JTAG Reset Digital Core";
192
- break;
193
- #endif
194
- #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3)
195
- case POWER_GLITCH_RESET:
196
- reset_reason = "Power Glitch Reset Digital Core And RTC Module";
197
- break;
198
- #endif
199
- default:
200
- reset_reason = "Unknown Reset Reason";
201
- }
202
- break;
203
- }
204
- ESP_LOGD(TAG, "Reset Reason: %s", reset_reason.c_str());
205
- return reset_reason;
206
- }
207
-
208
122
  uint32_t DebugComponent::get_free_heap_() { return heap_caps_get_free_size(MALLOC_CAP_INTERNAL); }
209
123
 
124
+ static const std::map<int, const char *> CHIP_FEATURES = {
125
+ {CHIP_FEATURE_BLE, "BLE"},
126
+ {CHIP_FEATURE_BT, "BT"},
127
+ {CHIP_FEATURE_EMB_FLASH, "EMB Flash"},
128
+ {CHIP_FEATURE_EMB_PSRAM, "EMB PSRAM"},
129
+ {CHIP_FEATURE_WIFI_BGN, "2.4GHz WiFi"},
130
+ };
131
+
210
132
  void DebugComponent::get_device_info_(std::string &device_info) {
211
133
  #if defined(USE_ARDUINO)
212
134
  const char *flash_mode;
@@ -242,44 +164,16 @@ void DebugComponent::get_device_info_(std::string &device_info) {
242
164
 
243
165
  esp_chip_info_t info;
244
166
  esp_chip_info(&info);
245
- const char *model;
246
- #if defined(USE_ESP32_VARIANT_ESP32)
247
- model = "ESP32";
248
- #elif defined(USE_ESP32_VARIANT_ESP32C3)
249
- model = "ESP32-C3";
250
- #elif defined(USE_ESP32_VARIANT_ESP32C6)
251
- model = "ESP32-C6";
252
- #elif defined(USE_ESP32_VARIANT_ESP32S2)
253
- model = "ESP32-S2";
254
- #elif defined(USE_ESP32_VARIANT_ESP32S3)
255
- model = "ESP32-S3";
256
- #elif defined(USE_ESP32_VARIANT_ESP32H2)
257
- model = "ESP32-H2";
258
- #else
259
- model = "UNKNOWN";
260
- #endif
167
+ const char *model = ESPHOME_VARIANT;
261
168
  std::string features;
262
- if (info.features & CHIP_FEATURE_EMB_FLASH) {
263
- features += "EMB_FLASH,";
264
- info.features &= ~CHIP_FEATURE_EMB_FLASH;
169
+ for (auto feature : CHIP_FEATURES) {
170
+ if (info.features & feature.first) {
171
+ features += feature.second;
172
+ features += ", ";
173
+ info.features &= ~feature.first;
174
+ }
265
175
  }
266
- if (info.features & CHIP_FEATURE_WIFI_BGN) {
267
- features += "WIFI_BGN,";
268
- info.features &= ~CHIP_FEATURE_WIFI_BGN;
269
- }
270
- if (info.features & CHIP_FEATURE_BLE) {
271
- features += "BLE,";
272
- info.features &= ~CHIP_FEATURE_BLE;
273
- }
274
- if (info.features & CHIP_FEATURE_BT) {
275
- features += "BT,";
276
- info.features &= ~CHIP_FEATURE_BT;
277
- }
278
- if (info.features & CHIP_FEATURE_EMB_PSRAM) {
279
- features += "EMB_PSRAM,";
280
- info.features &= ~CHIP_FEATURE_EMB_PSRAM;
281
- }
282
- if (info.features)
176
+ if (info.features != 0)
283
177
  features += "Other:" + format_hex(info.features);
284
178
  ESP_LOGD(TAG, "Chip: Model=%s, Features=%s Cores=%u, Revision=%u", model, features.c_str(), info.cores,
285
179
  info.revision);
@@ -289,6 +183,8 @@ void DebugComponent::get_device_info_(std::string &device_info) {
289
183
  device_info += features;
290
184
  device_info += " Cores:" + to_string(info.cores);
291
185
  device_info += " Revision:" + to_string(info.revision);
186
+ device_info += str_sprintf("|CPU Frequency: %" PRIu32 " MHz", arch_get_cpu_freq_hz() / 1000000);
187
+ ESP_LOGD(TAG, "CPU Frequency: %" PRIu32 " MHz", arch_get_cpu_freq_hz() / 1000000);
292
188
 
293
189
  // Framework detection
294
190
  device_info += "|Framework: ";
@@ -315,48 +211,7 @@ void DebugComponent::get_device_info_(std::string &device_info) {
315
211
  device_info += "|Reset: ";
316
212
  device_info += get_reset_reason_();
317
213
 
318
- const char *wakeup_reason;
319
- switch (rtc_get_wakeup_cause()) {
320
- case NO_SLEEP:
321
- wakeup_reason = "No Sleep";
322
- break;
323
- case EXT_EVENT0_TRIG:
324
- wakeup_reason = "External Event 0";
325
- break;
326
- case EXT_EVENT1_TRIG:
327
- wakeup_reason = "External Event 1";
328
- break;
329
- case GPIO_TRIG:
330
- wakeup_reason = "GPIO";
331
- break;
332
- case TIMER_EXPIRE:
333
- wakeup_reason = "Wakeup Timer";
334
- break;
335
- case SDIO_TRIG:
336
- wakeup_reason = "SDIO";
337
- break;
338
- case MAC_TRIG:
339
- wakeup_reason = "MAC";
340
- break;
341
- case UART0_TRIG:
342
- wakeup_reason = "UART0";
343
- break;
344
- case UART1_TRIG:
345
- wakeup_reason = "UART1";
346
- break;
347
- case TOUCH_TRIG:
348
- wakeup_reason = "Touch";
349
- break;
350
- case SAR_TRIG:
351
- wakeup_reason = "SAR";
352
- break;
353
- case BT_TRIG:
354
- wakeup_reason = "BT";
355
- break;
356
- default:
357
- wakeup_reason = "Unknown";
358
- }
359
- ESP_LOGD(TAG, "Wakeup Reason: %s", wakeup_reason);
214
+ std::string wakeup_reason = this->get_wakeup_cause_();
360
215
  device_info += "|Wakeup: ";
361
216
  device_info += wakeup_reason;
362
217
  }
@@ -1,5 +1,6 @@
1
1
  import esphome.codegen as cg
2
2
  from esphome.components import sensor
3
+ from esphome.components.esp32 import CONF_CPU_FREQUENCY
3
4
  import esphome.config_validation as cv
4
5
  from esphome.const import (
5
6
  CONF_BLOCK,
@@ -10,6 +11,7 @@ from esphome.const import (
10
11
  ICON_COUNTER,
11
12
  ICON_TIMER,
12
13
  UNIT_BYTES,
14
+ UNIT_HERTZ,
13
15
  UNIT_MILLISECOND,
14
16
  UNIT_PERCENT,
15
17
  )
@@ -60,6 +62,14 @@ CONFIG_SCHEMA = {
60
62
  entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
61
63
  ),
62
64
  ),
65
+ cv.Optional(CONF_CPU_FREQUENCY): cv.All(
66
+ sensor.sensor_schema(
67
+ unit_of_measurement=UNIT_HERTZ,
68
+ icon="mdi:speedometer",
69
+ accuracy_decimals=0,
70
+ entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
71
+ ),
72
+ ),
63
73
  }
64
74
 
65
75
 
@@ -85,3 +95,7 @@ async def to_code(config):
85
95
  if psram_conf := config.get(CONF_PSRAM):
86
96
  sens = await sensor.new_sensor(psram_conf)
87
97
  cg.add(debug_component.set_psram_sensor(sens))
98
+
99
+ if cpu_freq_conf := config.get(CONF_CPU_FREQUENCY):
100
+ sens = await sensor.new_sensor(cpu_freq_conf)
101
+ cg.add(debug_component.set_cpu_frequency_sensor(sens))
@@ -31,9 +31,12 @@ void DeepSleepComponent::set_wakeup_pin_mode(WakeupPinMode wakeup_pin_mode) {
31
31
  #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6)
32
32
  void DeepSleepComponent::set_ext1_wakeup(Ext1Wakeup ext1_wakeup) { this->ext1_wakeup_ = ext1_wakeup; }
33
33
 
34
+ #if !defined(USE_ESP32_VARIANT_ESP32H2)
34
35
  void DeepSleepComponent::set_touch_wakeup(bool touch_wakeup) { this->touch_wakeup_ = touch_wakeup; }
35
36
  #endif
36
37
 
38
+ #endif
39
+
37
40
  void DeepSleepComponent::set_run_duration(WakeupCauseToRunDuration wakeup_cause_to_run_duration) {
38
41
  wakeup_cause_to_run_duration_ = wakeup_cause_to_run_duration;
39
42
  }
@@ -65,7 +68,7 @@ bool DeepSleepComponent::prepare_to_sleep_() {
65
68
  }
66
69
 
67
70
  void DeepSleepComponent::deep_sleep_() {
68
- #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6)
71
+ #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32C6) && !defined(USE_ESP32_VARIANT_ESP32H2)
69
72
  if (this->sleep_duration_.has_value())
70
73
  esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
71
74
  if (this->wakeup_pin_ != nullptr) {
@@ -84,6 +87,15 @@ void DeepSleepComponent::deep_sleep_() {
84
87
  esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
85
88
  }
86
89
  #endif
90
+
91
+ #if defined(USE_ESP32_VARIANT_ESP32H2)
92
+ if (this->sleep_duration_.has_value())
93
+ esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
94
+ if (this->ext1_wakeup_.has_value()) {
95
+ esp_sleep_enable_ext1_wakeup(this->ext1_wakeup_->mask, this->ext1_wakeup_->wakeup_mode);
96
+ }
97
+ #endif
98
+
87
99
  #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32C6)
88
100
  if (this->sleep_duration_.has_value())
89
101
  esp_sleep_enable_timer_wakeup(*this->sleep_duration_);
@@ -1,20 +1,13 @@
1
1
  import esphome.codegen as cg
2
2
  from esphome.components import climate_ir
3
- import esphome.config_validation as cv
4
- from esphome.const import CONF_ID
5
3
 
6
4
  AUTO_LOAD = ["climate_ir"]
7
5
 
8
6
  delonghi_ns = cg.esphome_ns.namespace("delonghi")
9
7
  DelonghiClimate = delonghi_ns.class_("DelonghiClimate", climate_ir.ClimateIR)
10
8
 
11
- CONFIG_SCHEMA = climate_ir.CLIMATE_IR_WITH_RECEIVER_SCHEMA.extend(
12
- {
13
- cv.GenerateID(): cv.declare_id(DelonghiClimate),
14
- }
15
- )
9
+ CONFIG_SCHEMA = climate_ir.climate_ir_with_receiver_schema(DelonghiClimate)
16
10
 
17
11
 
18
12
  async def to_code(config):
19
- var = cg.new_Pvariable(config[CONF_ID])
20
- await climate_ir.register_climate_ir(var, config)
13
+ await climate_ir.new_climate_ir(config)
@@ -17,7 +17,6 @@ from esphome.const import (
17
17
  CONF_DEVICE_CLASS,
18
18
  CONF_FORCE_UPDATE,
19
19
  CONF_ICON,
20
- CONF_ID,
21
20
  CONF_INVERTED,
22
21
  CONF_MAX_VALUE,
23
22
  CONF_MIN_VALUE,
@@ -153,9 +152,10 @@ CONFIG_SCHEMA = cv.Schema(
153
152
  },
154
153
  ],
155
154
  ): [
156
- climate.CLIMATE_SCHEMA.extend(cv.COMPONENT_SCHEMA).extend(
155
+ climate.climate_schema(DemoClimate)
156
+ .extend(cv.COMPONENT_SCHEMA)
157
+ .extend(
157
158
  {
158
- cv.GenerateID(): cv.declare_id(DemoClimate),
159
159
  cv.Required(CONF_TYPE): cv.enum(CLIMATE_TYPES, int=True),
160
160
  }
161
161
  )
@@ -183,9 +183,10 @@ CONFIG_SCHEMA = cv.Schema(
183
183
  },
184
184
  ],
185
185
  ): [
186
- cover.COVER_SCHEMA.extend(cv.COMPONENT_SCHEMA).extend(
186
+ cover.cover_schema(DemoCover)
187
+ .extend(cv.COMPONENT_SCHEMA)
188
+ .extend(
187
189
  {
188
- cv.GenerateID(): cv.declare_id(DemoCover),
189
190
  cv.Required(CONF_TYPE): cv.enum(COVER_TYPES, int=True),
190
191
  }
191
192
  )
@@ -211,9 +212,10 @@ CONFIG_SCHEMA = cv.Schema(
211
212
  },
212
213
  ],
213
214
  ): [
214
- fan.FAN_SCHEMA.extend(cv.COMPONENT_SCHEMA).extend(
215
+ fan.fan_schema(DemoFan)
216
+ .extend(cv.COMPONENT_SCHEMA)
217
+ .extend(
215
218
  {
216
- cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(DemoFan),
217
219
  cv.Required(CONF_TYPE): cv.enum(FAN_TYPES, int=True),
218
220
  }
219
221
  )
@@ -251,7 +253,9 @@ CONFIG_SCHEMA = cv.Schema(
251
253
  },
252
254
  ],
253
255
  ): [
254
- light.RGB_LIGHT_SCHEMA.extend(cv.COMPONENT_SCHEMA).extend(
256
+ light.light_schema(DemoLight, light.LightType.RGB)
257
+ .extend(cv.COMPONENT_SCHEMA)
258
+ .extend(
255
259
  {
256
260
  cv.GenerateID(CONF_OUTPUT_ID): cv.declare_id(DemoLight),
257
261
  cv.Required(CONF_TYPE): cv.enum(LIGHT_TYPES, int=True),
@@ -377,39 +381,33 @@ async def to_code(config):
377
381
  await cg.register_component(var, conf)
378
382
 
379
383
  for conf in config[CONF_CLIMATES]:
380
- var = cg.new_Pvariable(conf[CONF_ID])
384
+ var = await climate.new_climate(conf)
381
385
  await cg.register_component(var, conf)
382
- await climate.register_climate(var, conf)
383
386
  cg.add(var.set_type(conf[CONF_TYPE]))
384
387
 
385
388
  for conf in config[CONF_COVERS]:
386
- var = cg.new_Pvariable(conf[CONF_ID])
389
+ var = await cover.new_cover(conf)
387
390
  await cg.register_component(var, conf)
388
- await cover.register_cover(var, conf)
389
391
  cg.add(var.set_type(conf[CONF_TYPE]))
390
392
 
391
393
  for conf in config[CONF_FANS]:
392
- var = cg.new_Pvariable(conf[CONF_OUTPUT_ID])
394
+ var = await fan.new_fan(conf)
393
395
  await cg.register_component(var, conf)
394
- await fan.register_fan(var, conf)
395
396
  cg.add(var.set_type(conf[CONF_TYPE]))
396
397
 
397
398
  for conf in config[CONF_LIGHTS]:
398
- var = cg.new_Pvariable(conf[CONF_OUTPUT_ID])
399
+ var = await light.new_light(conf)
399
400
  await cg.register_component(var, conf)
400
- await light.register_light(var, conf)
401
401
  cg.add(var.set_type(conf[CONF_TYPE]))
402
402
 
403
403
  for conf in config[CONF_NUMBERS]:
404
- var = cg.new_Pvariable(conf[CONF_ID])
405
- await cg.register_component(var, conf)
406
- await number.register_number(
407
- var,
404
+ var = await number.new_number(
408
405
  conf,
409
406
  min_value=conf[CONF_MIN_VALUE],
410
407
  max_value=conf[CONF_MAX_VALUE],
411
408
  step=conf[CONF_STEP],
412
409
  )
410
+ await cg.register_component(var, conf)
413
411
  cg.add(var.set_type(conf[CONF_TYPE]))
414
412
 
415
413
  for conf in config[CONF_SENSORS]:
@@ -2,6 +2,7 @@ import esphome.codegen as cg
2
2
  from esphome.components import switch
3
3
  import esphome.config_validation as cv
4
4
  from esphome.const import CONF_TYPE, ENTITY_CATEGORY_CONFIG
5
+ from esphome.cpp_generator import MockObjClass
5
6
 
6
7
  from .. import CONF_DFROBOT_SEN0395_ID, DfrobotSen0395Component
7
8
 
@@ -26,32 +27,30 @@ Sen0395StartAfterBootSwitch = dfrobot_sen0395_ns.class_(
26
27
  "Sen0395StartAfterBootSwitch", DfrobotSen0395Switch
27
28
  )
28
29
 
29
- _SWITCH_SCHEMA = (
30
- switch.switch_schema(
31
- entity_category=ENTITY_CATEGORY_CONFIG,
32
- )
33
- .extend(
34
- {
35
- cv.GenerateID(CONF_DFROBOT_SEN0395_ID): cv.use_id(DfrobotSen0395Component),
36
- }
30
+
31
+ def _switch_schema(class_: MockObjClass) -> cv.Schema:
32
+ return (
33
+ switch.switch_schema(
34
+ class_,
35
+ entity_category=ENTITY_CATEGORY_CONFIG,
36
+ )
37
+ .extend(
38
+ {
39
+ cv.GenerateID(CONF_DFROBOT_SEN0395_ID): cv.use_id(
40
+ DfrobotSen0395Component
41
+ ),
42
+ }
43
+ )
44
+ .extend(cv.COMPONENT_SCHEMA)
37
45
  )
38
- .extend(cv.COMPONENT_SCHEMA)
39
- )
46
+
40
47
 
41
48
  CONFIG_SCHEMA = cv.typed_schema(
42
49
  {
43
- "sensor_active": _SWITCH_SCHEMA.extend(
44
- {cv.GenerateID(): cv.declare_id(Sen0395PowerSwitch)}
45
- ),
46
- "turn_on_led": _SWITCH_SCHEMA.extend(
47
- {cv.GenerateID(): cv.declare_id(Sen0395LedSwitch)}
48
- ),
49
- "presence_via_uart": _SWITCH_SCHEMA.extend(
50
- {cv.GenerateID(): cv.declare_id(Sen0395UartPresenceSwitch)}
51
- ),
52
- "start_after_boot": _SWITCH_SCHEMA.extend(
53
- {cv.GenerateID(): cv.declare_id(Sen0395StartAfterBootSwitch)}
54
- ),
50
+ "sensor_active": _switch_schema(Sen0395PowerSwitch),
51
+ "turn_on_led": _switch_schema(Sen0395LedSwitch),
52
+ "presence_via_uart": _switch_schema(Sen0395UartPresenceSwitch),
53
+ "start_after_boot": _switch_schema(Sen0395StartAfterBootSwitch),
55
54
  }
56
55
  )
57
56