esphome 2025.5.1__py3-none-any.whl → 2025.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +5 -0
  33. esphome/components/api/api_pb2.h +703 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -5
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/gpio.cpp +10 -1
  191. esphome/components/esp8266/preferences.cpp +6 -6
  192. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  193. esphome/components/esp_ldo/__init__.py +91 -0
  194. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  195. esphome/components/esp_ldo/esp_ldo.h +43 -0
  196. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  197. esphome/components/ethernet/ethernet_component.cpp +38 -26
  198. esphome/components/ethernet/ethernet_component.h +1 -1
  199. esphome/components/event/__init__.py +1 -0
  200. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  201. esphome/components/ezo/ezo.cpp +1 -1
  202. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  203. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  204. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  205. esphome/components/fan/__init__.py +1 -0
  206. esphome/components/fan/fan.cpp +30 -19
  207. esphome/components/fastled_base/fastled_light.cpp +7 -5
  208. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  209. esphome/components/fs3000/fs3000.cpp +1 -1
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  211. esphome/components/ft63x6/ft63x6.cpp +5 -3
  212. esphome/components/gcja5/gcja5.cpp +0 -12
  213. esphome/components/gcja5/gcja5.h +8 -3
  214. esphome/components/gdk101/gdk101.cpp +2 -2
  215. esphome/components/globals/globals_component.h +13 -10
  216. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  217. esphome/components/gp8403/gp8403.cpp +4 -2
  218. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  219. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  220. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  221. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  222. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  226. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  228. esphome/components/haier/haier_base.cpp +2 -2
  229. esphome/components/haier/hon_climate.cpp +13 -6
  230. esphome/components/havells_solar/havells_solar.cpp +5 -2
  231. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  232. esphome/components/hdc1080/hdc1080.cpp +2 -2
  233. esphome/components/he60r/he60r.cpp +4 -2
  234. esphome/components/hlw8012/hlw8012.cpp +6 -4
  235. esphome/components/hm3301/hm3301.cpp +2 -2
  236. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  237. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  238. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  239. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  240. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  241. esphome/components/hte501/hte501.cpp +3 -2
  242. esphome/components/http_request/__init__.py +2 -2
  243. esphome/components/http_request/http_request.cpp +7 -5
  244. esphome/components/http_request/http_request_idf.cpp +4 -2
  245. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  246. esphome/components/htu21d/htu21d.cpp +2 -2
  247. esphome/components/htu31d/htu31d.cpp +2 -2
  248. esphome/components/hx711/hx711.cpp +2 -2
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  250. esphome/components/hyt271/hyt271.cpp +2 -2
  251. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  253. esphome/components/i2s_audio/__init__.py +2 -0
  254. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  255. esphome/components/i2s_audio/i2s_audio.h +1 -1
  256. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  262. esphome/components/iaqcore/iaqcore.cpp +3 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  264. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  265. esphome/components/image/image.cpp +1 -0
  266. esphome/components/ina219/ina219.cpp +2 -2
  267. esphome/components/ina226/ina226.cpp +8 -5
  268. esphome/components/ina260/ina260.cpp +1 -1
  269. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  270. esphome/components/ina3221/ina3221.cpp +2 -2
  271. esphome/components/inkplate6/display.py +12 -2
  272. esphome/components/inkplate6/inkplate.cpp +13 -9
  273. esphome/components/inkplate6/inkplate.h +7 -6
  274. esphome/components/integration/integration_sensor.cpp +1 -1
  275. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  276. esphome/components/json/json_util.cpp +4 -5
  277. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  278. esphome/components/key_collector/key_collector.cpp +4 -2
  279. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  280. esphome/components/kuntze/kuntze.cpp +4 -2
  281. esphome/components/lc709203f/__init__.py +1 -0
  282. esphome/components/lc709203f/lc709203f.cpp +299 -0
  283. esphome/components/lc709203f/lc709203f.h +55 -0
  284. esphome/components/lc709203f/sensor.py +93 -0
  285. esphome/components/lcd_base/lcd_display.cpp +2 -2
  286. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  287. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  288. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  289. esphome/components/ld2410/ld2410.cpp +6 -7
  290. esphome/components/ld2420/ld2420.cpp +9 -7
  291. esphome/components/ld2450/ld2450.cpp +6 -4
  292. esphome/components/ld2450/sensor.py +2 -2
  293. esphome/components/ledc/ledc_output.cpp +32 -28
  294. esphome/components/libretiny/const.py +1 -1
  295. esphome/components/libretiny/preferences.cpp +6 -7
  296. esphome/components/light/__init__.py +2 -1
  297. esphome/components/light/esp_hsv_color.h +1 -1
  298. esphome/components/light/light_state.cpp +9 -5
  299. esphome/components/light/light_state.h +15 -15
  300. esphome/components/light/light_transformer.h +1 -1
  301. esphome/components/lightwaverf/LwTx.cpp +1 -1
  302. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  303. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  304. esphome/components/lock/__init__.py +1 -0
  305. esphome/components/lock/lock.h +1 -1
  306. esphome/components/logger/__init__.py +6 -0
  307. esphome/components/logger/logger.cpp +11 -20
  308. esphome/components/logger/logger.h +5 -6
  309. esphome/components/logger/logger_esp32.cpp +5 -5
  310. esphome/components/ltr390/ltr390.cpp +8 -5
  311. esphome/components/ltr501/ltr501.cpp +19 -14
  312. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  313. esphome/components/lvgl/__init__.py +2 -2
  314. esphome/components/lvgl/automation.py +5 -4
  315. esphome/components/lvgl/defines.py +0 -2
  316. esphome/components/lvgl/lv_validation.py +1 -3
  317. esphome/components/lvgl/lvcode.py +7 -8
  318. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  319. esphome/components/lvgl/schemas.py +22 -23
  320. esphome/components/lvgl/trigger.py +8 -3
  321. esphome/components/lvgl/widgets/__init__.py +2 -2
  322. esphome/components/lvgl/widgets/canvas.py +9 -3
  323. esphome/components/lvgl/widgets/line.py +2 -1
  324. esphome/components/lvgl/widgets/tabview.py +7 -0
  325. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  326. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  327. esphome/components/max17043/max17043.cpp +2 -2
  328. esphome/components/max31855/max31855.cpp +2 -1
  329. esphome/components/max31856/max31856.cpp +9 -11
  330. esphome/components/max31865/max31865.cpp +6 -4
  331. esphome/components/max44009/max44009.cpp +2 -2
  332. esphome/components/max6675/max6675.cpp +1 -1
  333. esphome/components/max6956/max6956.cpp +5 -3
  334. esphome/components/max7219/max7219.cpp +8 -6
  335. esphome/components/max7219digit/automation.h +52 -0
  336. esphome/components/max7219digit/display.py +93 -1
  337. esphome/components/max7219digit/max7219digit.cpp +16 -13
  338. esphome/components/max9611/max9611.cpp +9 -6
  339. esphome/components/mcp23008/mcp23008.cpp +1 -1
  340. esphome/components/mcp23016/mcp23016.cpp +1 -1
  341. esphome/components/mcp23017/mcp23017.cpp +1 -1
  342. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  343. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  344. esphome/components/mcp3008/mcp3008.cpp +1 -1
  345. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  346. esphome/components/mcp3204/mcp3204.cpp +1 -1
  347. esphome/components/mcp4461/mcp4461.cpp +2 -2
  348. esphome/components/mcp4725/mcp4725.cpp +2 -2
  349. esphome/components/mcp4728/mcp4728.cpp +2 -2
  350. esphome/components/mcp9600/mcp9600.cpp +1 -1
  351. esphome/components/mcp9808/mcp9808.cpp +4 -4
  352. esphome/components/mdns/mdns_component.cpp +8 -2
  353. esphome/components/mdns/mdns_component.h +3 -1
  354. esphome/components/mdns/mdns_esp32.cpp +2 -2
  355. esphome/components/media_player/__init__.py +1 -0
  356. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  357. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  358. esphome/components/micronova/micronova.h +2 -2
  359. esphome/components/mics_4514/mics_4514.cpp +2 -2
  360. esphome/components/midea/air_conditioner.cpp +7 -5
  361. esphome/components/midea_ir/midea_ir.cpp +1 -1
  362. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  363. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  364. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  365. esphome/components/mlx90614/mlx90614.cpp +4 -3
  366. esphome/components/mmc5603/mmc5603.cpp +2 -2
  367. esphome/components/mmc5983/mmc5983.cpp +1 -1
  368. esphome/components/modbus/modbus.cpp +7 -5
  369. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  370. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  371. esphome/components/modbus_controller/switch/__init__.py +6 -2
  372. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  373. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  374. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  375. esphome/components/mpr121/mpr121.cpp +2 -2
  376. esphome/components/mpu6050/mpu6050.cpp +6 -6
  377. esphome/components/mpu6886/mpu6886.cpp +6 -6
  378. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  379. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  380. esphome/components/mqtt/mqtt_client.cpp +31 -24
  381. esphome/components/mqtt/mqtt_component.cpp +3 -3
  382. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  383. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  384. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  385. esphome/components/ms5611/ms5611.cpp +2 -2
  386. esphome/components/ms8607/ms8607.cpp +2 -2
  387. esphome/components/msa3xx/msa3xx.cpp +16 -12
  388. esphome/components/my9231/my9231.cpp +7 -5
  389. esphome/components/nau7802/nau7802.cpp +6 -4
  390. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  391. esphome/components/network/ip_address.h +1 -1
  392. esphome/components/network/util.cpp +13 -0
  393. esphome/components/nextion/base_component.py +2 -0
  394. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  395. esphome/components/nextion/display.py +34 -22
  396. esphome/components/nextion/nextion.cpp +182 -143
  397. esphome/components/nextion/nextion.h +36 -0
  398. esphome/components/nextion/nextion_commands.cpp +3 -3
  399. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  400. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  401. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  402. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  403. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  404. esphome/components/nfc/nci_message.h +1 -1
  405. esphome/components/nfc/ndef_record.h +1 -1
  406. esphome/components/nfc/ndef_record_text.h +1 -1
  407. esphome/components/nfc/ndef_record_uri.h +1 -1
  408. esphome/components/nfc/nfc.h +1 -1
  409. esphome/components/nfc/nfc_tag.h +1 -1
  410. esphome/components/noblex/noblex.cpp +1 -1
  411. esphome/components/npi19/npi19.cpp +5 -7
  412. esphome/components/number/__init__.py +11 -0
  413. esphome/components/number/number.cpp +1 -1
  414. esphome/components/number/number.h +0 -4
  415. esphome/components/online_image/__init__.py +13 -1
  416. esphome/components/online_image/online_image.cpp +26 -4
  417. esphome/components/online_image/online_image.h +21 -4
  418. esphome/components/opentherm/generate.py +3 -3
  419. esphome/components/opentherm/hub.cpp +11 -7
  420. esphome/components/opentherm/number/number.cpp +5 -3
  421. esphome/components/opentherm/opentherm.h +1 -1
  422. esphome/components/opentherm/schema.py +13 -13
  423. esphome/components/opentherm/validate.py +1 -1
  424. esphome/components/openthread/__init__.py +146 -0
  425. esphome/components/openthread/const.py +10 -0
  426. esphome/components/openthread/openthread.cpp +206 -0
  427. esphome/components/openthread/openthread.h +68 -0
  428. esphome/components/openthread/openthread_esp.cpp +164 -0
  429. esphome/components/openthread/tlv.py +58 -0
  430. esphome/components/openthread_info/__init__.py +0 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  432. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  433. esphome/components/openthread_info/text_sensor.py +105 -0
  434. esphome/components/output/float_output.cpp +1 -1
  435. esphome/components/output/switch/output_switch.cpp +1 -1
  436. esphome/components/packet_transport/packet_transport.cpp +6 -4
  437. esphome/components/pca6416a/pca6416a.cpp +2 -2
  438. esphome/components/pca9554/pca9554.cpp +6 -4
  439. esphome/components/pca9685/pca9685_output.cpp +12 -8
  440. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  441. esphome/components/pcf85063/pcf85063.cpp +2 -2
  442. esphome/components/pcf8563/pcf8563.cpp +2 -2
  443. esphome/components/pcf8574/pcf8574.cpp +2 -2
  444. esphome/components/pid/pid_climate.cpp +8 -5
  445. esphome/components/pid/pid_climate.h +1 -1
  446. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  447. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  448. esphome/components/pipsolar/pipsolar.cpp +3 -3
  449. esphome/components/pm1006/pm1006.cpp +3 -7
  450. esphome/components/pm1006/pm1006.h +4 -1
  451. esphome/components/pm2005/pm2005.cpp +12 -13
  452. esphome/components/pm2005/sensor.py +1 -1
  453. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  454. esphome/components/pmsx003/pmsx003.cpp +0 -4
  455. esphome/components/pmsx003/pmsx003.h +5 -2
  456. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  457. esphome/components/pmwcs3/pmwcs3.h +0 -1
  458. esphome/components/pn532/pn532.cpp +7 -7
  459. esphome/components/pn532/pn532.h +1 -1
  460. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  461. esphome/components/pn7150/pn7150.cpp +4 -4
  462. esphome/components/pn7160/pn7160.cpp +4 -4
  463. esphome/components/power_supply/power_supply.cpp +6 -4
  464. esphome/components/power_supply/power_supply.h +1 -1
  465. esphome/components/prometheus/__init__.py +0 -1
  466. esphome/components/psram/__init__.py +59 -35
  467. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  468. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  469. esphome/components/pylontech/pylontech.cpp +2 -2
  470. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  471. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  472. esphome/components/pzemac/pzemac.cpp +4 -2
  473. esphome/components/pzemdc/pzemdc.cpp +4 -2
  474. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.cpp +2 -2
  476. esphome/components/qmp6988/qmp6988.h +1 -1
  477. esphome/components/qr_code/qr_code.cpp +5 -3
  478. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  479. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  480. esphome/components/rc522/rc522.cpp +5 -5
  481. esphome/components/rdm6300/rdm6300.cpp +1 -0
  482. esphome/components/remote_receiver/__init__.py +10 -2
  483. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  484. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  485. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  486. esphome/components/remote_transmitter/__init__.py +10 -2
  487. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  488. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  489. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  490. esphome/components/resistance/resistance_sensor.cpp +6 -3
  491. esphome/components/restart/button/restart_button.cpp +1 -1
  492. esphome/components/restart/switch/restart_switch.cpp +1 -1
  493. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  494. esphome/components/rp2040/__init__.py +7 -0
  495. esphome/components/rp2040/core.cpp +8 -1
  496. esphome/components/rp2040/gpio.cpp +26 -9
  497. esphome/components/rp2040/preferences.cpp +3 -3
  498. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  499. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  500. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  501. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  502. esphome/components/rtttl/rtttl.cpp +11 -9
  503. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  504. esphome/components/safe_mode/safe_mode.cpp +9 -8
  505. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  506. esphome/components/scd30/scd30.cpp +11 -8
  507. esphome/components/scd4x/scd4x.cpp +12 -8
  508. esphome/components/sdl/display.py +40 -0
  509. esphome/components/sdl/sdl_esphome.cpp +2 -2
  510. esphome/components/sdl/sdl_esphome.h +8 -0
  511. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  512. esphome/components/sdp3x/sdp3x.cpp +11 -11
  513. esphome/components/sds011/sds011.cpp +5 -6
  514. esphome/components/sds011/sds011.h +4 -1
  515. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  516. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  517. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  518. esphome/components/selec_meter/selec_meter.cpp +5 -2
  519. esphome/components/select/__init__.py +1 -0
  520. esphome/components/select/select.cpp +1 -1
  521. esphome/components/select/select.h +0 -4
  522. esphome/components/sen0321/sen0321.cpp +2 -2
  523. esphome/components/sen21231/sen21231.cpp +1 -1
  524. esphome/components/sen5x/sen5x.cpp +10 -7
  525. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  526. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  527. esphome/components/sensor/__init__.py +11 -1
  528. esphome/components/sensor/filter.h +1 -1
  529. esphome/components/sensor/sensor.cpp +8 -4
  530. esphome/components/sensor/sensor.h +12 -11
  531. esphome/components/servo/servo.cpp +12 -9
  532. esphome/components/servo/servo.h +1 -1
  533. esphome/components/sfa30/sfa30.cpp +1 -1
  534. esphome/components/sgp30/sgp30.cpp +10 -8
  535. esphome/components/sgp4x/sgp4x.cpp +49 -61
  536. esphome/components/sgp4x/sgp4x.h +0 -1
  537. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  538. esphome/components/sht3xd/sht3xd.cpp +1 -1
  539. esphome/components/sht4x/sht4x.cpp +2 -2
  540. esphome/components/shtcx/shtcx.cpp +13 -16
  541. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  542. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  543. esphome/components/sim800l/sim800l.cpp +2 -2
  544. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  545. esphome/components/sm16716/sm16716.cpp +1 -1
  546. esphome/components/sm2135/sm2135.cpp +1 -1
  547. esphome/components/sm2235/sm2235.cpp +5 -3
  548. esphome/components/sm2335/sm2335.cpp +5 -3
  549. esphome/components/sml/sml.cpp +1 -1
  550. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  551. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  552. esphome/components/sntp/sntp_component.cpp +1 -1
  553. esphome/components/socket/__init__.py +2 -0
  554. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  555. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  556. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  557. esphome/components/socket/socket.cpp +31 -0
  558. esphome/components/socket/socket.h +27 -1
  559. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  560. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  561. esphome/components/sound_level/sound_level.cpp +4 -2
  562. esphome/components/speaker/media_player/__init__.py +3 -0
  563. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  564. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  565. esphome/components/spi/__init__.py +10 -2
  566. esphome/components/spi/spi.cpp +4 -4
  567. esphome/components/spi/spi_arduino.cpp +22 -9
  568. esphome/components/spi_device/spi_device.cpp +1 -2
  569. esphome/components/sprinkler/sprinkler.cpp +9 -6
  570. esphome/components/sps30/sps30.cpp +16 -15
  571. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  572. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  573. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  574. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  575. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  576. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  577. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  578. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  579. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  580. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  581. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  582. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  583. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  584. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  585. esphome/components/st7567_base/st7567_base.cpp +3 -3
  586. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  587. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  588. esphome/components/st7701s/st7701s.cpp +4 -2
  589. esphome/components/st7735/st7735.cpp +3 -3
  590. esphome/components/st7789v/st7789v.cpp +10 -7
  591. esphome/components/st7920/st7920.cpp +6 -4
  592. esphome/components/statsd/statsd.cpp +9 -5
  593. esphome/components/status_led/light/status_led_light.cpp +3 -3
  594. esphome/components/status_led/light/status_led_light.h +1 -1
  595. esphome/components/status_led/status_led.cpp +1 -1
  596. esphome/components/stepper/stepper.h +5 -3
  597. esphome/components/sts3x/sts3x.cpp +2 -2
  598. esphome/components/switch/__init__.py +1 -0
  599. esphome/components/switch/switch.cpp +18 -12
  600. esphome/components/switch/switch.h +14 -8
  601. esphome/components/sx1509/__init__.py +53 -20
  602. esphome/components/sx1509/sx1509.cpp +29 -5
  603. esphome/components/sx1509/sx1509.h +9 -1
  604. esphome/components/t6615/t6615.cpp +1 -0
  605. esphome/components/tc74/tc74.cpp +1 -1
  606. esphome/components/tca9548a/tca9548a.cpp +1 -1
  607. esphome/components/tca9555/tca9555.cpp +2 -2
  608. esphome/components/tcs34725/tcs34725.cpp +4 -4
  609. esphome/components/tee501/tee501.cpp +3 -2
  610. esphome/components/tem3200/tem3200.cpp +5 -6
  611. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  612. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  613. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  614. esphome/components/template/cover/template_cover.cpp +1 -1
  615. esphome/components/template/select/template_select.cpp +6 -4
  616. esphome/components/template/text/template_text.cpp +2 -3
  617. esphome/components/template/valve/template_valve.cpp +5 -3
  618. esphome/components/text/__init__.py +10 -11
  619. esphome/components/text/text.cpp +1 -1
  620. esphome/components/text/text.h +0 -4
  621. esphome/components/text_sensor/__init__.py +1 -0
  622. esphome/components/text_sensor/text_sensor.cpp +8 -4
  623. esphome/components/text_sensor/text_sensor.h +6 -6
  624. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  625. esphome/components/time/__init__.py +1 -2
  626. esphome/components/time_based/time_based_cover.cpp +4 -2
  627. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  628. esphome/components/tm1621/tm1621.cpp +3 -3
  629. esphome/components/tm1637/tm1637.cpp +9 -7
  630. esphome/components/tm1638/tm1638.cpp +7 -5
  631. esphome/components/tm1651/tm1651.cpp +2 -2
  632. esphome/components/tmp102/tmp102.cpp +1 -3
  633. esphome/components/tmp102/tmp102.h +0 -3
  634. esphome/components/tmp1075/tmp1075.cpp +12 -9
  635. esphome/components/tmp117/tmp117.cpp +2 -2
  636. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  637. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  638. esphome/components/tsl2561/tsl2561.cpp +7 -5
  639. esphome/components/tsl2591/tsl2591.cpp +25 -27
  640. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  641. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  642. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  643. esphome/components/tuya/select/tuya_select.cpp +5 -3
  644. esphome/components/tx20/tx20.cpp +3 -3
  645. esphome/components/uart/__init__.py +4 -5
  646. esphome/components/uart/button/uart_button.cpp +1 -1
  647. esphome/components/uart/switch/uart_switch.cpp +2 -2
  648. esphome/components/uart/uart.cpp +2 -2
  649. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  650. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  651. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  652. esphome/components/uart/uart_component_host.cpp +11 -8
  653. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  654. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  655. esphome/components/udp/udp_component.cpp +9 -5
  656. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  657. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  658. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  659. esphome/components/update/__init__.py +1 -0
  660. esphome/components/update/update_entity.cpp +1 -1
  661. esphome/components/update/update_entity.h +0 -3
  662. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  663. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  664. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  665. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  666. esphome/components/usb_host/__init__.py +64 -0
  667. esphome/components/usb_host/usb_host.h +116 -0
  668. esphome/components/usb_host/usb_host_client.cpp +394 -0
  669. esphome/components/usb_host/usb_host_component.cpp +35 -0
  670. esphome/components/usb_uart/__init__.py +134 -0
  671. esphome/components/usb_uart/ch34x.cpp +80 -0
  672. esphome/components/usb_uart/cp210x.cpp +126 -0
  673. esphome/components/usb_uart/usb_uart.cpp +328 -0
  674. esphome/components/usb_uart/usb_uart.h +151 -0
  675. esphome/components/valve/__init__.py +1 -0
  676. esphome/components/veml3235/veml3235.cpp +13 -9
  677. esphome/components/veml7700/veml7700.cpp +10 -6
  678. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  679. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  680. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  681. esphome/components/web_server/server_index_v2.h +632 -630
  682. esphome/components/web_server/server_index_v3.h +411 -409
  683. esphome/components/web_server/web_server.cpp +5 -3
  684. esphome/components/web_server_base/web_server_base.cpp +1 -1
  685. esphome/components/web_server_idf/__init__.py +0 -2
  686. esphome/components/web_server_idf/utils.cpp +1 -1
  687. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  688. esphome/components/web_server_idf/web_server_idf.h +7 -0
  689. esphome/components/weikai/__init__.py +2 -0
  690. esphome/components/weikai/weikai.cpp +24 -22
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  692. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  693. esphome/components/wiegand/wiegand.cpp +1 -1
  694. esphome/components/wifi/wifi_component.cpp +50 -37
  695. esphome/components/wifi/wifi_component.h +7 -4
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  697. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  698. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  699. esphome/components/wireguard/wireguard.cpp +21 -21
  700. esphome/components/wl_134/text_sensor.py +1 -2
  701. esphome/components/wled/wled_light_effect.cpp +1 -1
  702. esphome/components/x9c/x9c.cpp +5 -3
  703. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  704. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  705. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  706. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  707. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  708. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  709. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  710. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  711. esphome/components/xl9535/xl9535.cpp +2 -2
  712. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  713. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  714. esphome/config.py +3 -2
  715. esphome/config_validation.py +46 -17
  716. esphome/const.py +10 -1
  717. esphome/core/__init__.py +37 -18
  718. esphome/core/application.cpp +197 -8
  719. esphome/core/application.h +116 -6
  720. esphome/core/component.cpp +36 -15
  721. esphome/core/component.h +43 -13
  722. esphome/core/config.py +12 -0
  723. esphome/core/defines.h +10 -2
  724. esphome/core/entity_base.cpp +4 -16
  725. esphome/core/entity_base.h +27 -13
  726. esphome/core/hal.h +5 -0
  727. esphome/core/helpers.cpp +1 -1
  728. esphome/core/helpers.h +5 -5
  729. esphome/core/log.h +2 -0
  730. esphome/core/log_const_en.h +4 -0
  731. esphome/core/scheduler.cpp +2 -2
  732. esphome/coroutine.py +3 -4
  733. esphome/cpp_generator.py +32 -32
  734. esphome/dashboard/core.py +2 -2
  735. esphome/dashboard/web_server.py +2 -2
  736. esphome/git.py +4 -4
  737. esphome/helpers.py +5 -6
  738. esphome/loader.py +8 -7
  739. esphome/log.py +7 -1
  740. esphome/platformio_api.py +2 -3
  741. esphome/storage_json.py +13 -5
  742. esphome/types.py +12 -13
  743. esphome/util.py +1 -2
  744. esphome/wizard.py +0 -16
  745. esphome/writer.py +5 -3
  746. esphome/yaml_util.py +6 -1
  747. esphome/zeroconf.py +1 -1
  748. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  749. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
  750. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  751. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  752. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  753. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  #include "esphome/core/component.h"
2
2
 
3
3
  #include <cinttypes>
4
+ #include <limits>
4
5
  #include <utility>
5
6
  #include "esphome/core/application.h"
6
7
  #include "esphome/core/hal.h"
@@ -29,18 +30,20 @@ const float LATE = -100.0f;
29
30
 
30
31
  } // namespace setup_priority
31
32
 
32
- const uint32_t COMPONENT_STATE_MASK = 0xFF;
33
- const uint32_t COMPONENT_STATE_CONSTRUCTION = 0x00;
34
- const uint32_t COMPONENT_STATE_SETUP = 0x01;
35
- const uint32_t COMPONENT_STATE_LOOP = 0x02;
36
- const uint32_t COMPONENT_STATE_FAILED = 0x03;
37
- const uint32_t STATUS_LED_MASK = 0xFF00;
38
- const uint32_t STATUS_LED_OK = 0x0000;
39
- const uint32_t STATUS_LED_WARNING = 0x0100;
40
- const uint32_t STATUS_LED_ERROR = 0x0200;
41
-
42
- const uint32_t WARN_IF_BLOCKING_OVER_MS = 50U; ///< Initial blocking time allowed without warning
43
- const uint32_t WARN_IF_BLOCKING_INCREMENT_MS = 10U; ///< How long the blocking time must be larger to warn again
33
+ // Component state uses bits 0-1 (4 states)
34
+ const uint8_t COMPONENT_STATE_MASK = 0x03;
35
+ const uint8_t COMPONENT_STATE_CONSTRUCTION = 0x00;
36
+ const uint8_t COMPONENT_STATE_SETUP = 0x01;
37
+ const uint8_t COMPONENT_STATE_LOOP = 0x02;
38
+ const uint8_t COMPONENT_STATE_FAILED = 0x03;
39
+ // Status LED uses bits 2-3
40
+ const uint8_t STATUS_LED_MASK = 0x0C;
41
+ const uint8_t STATUS_LED_OK = 0x00;
42
+ const uint8_t STATUS_LED_WARNING = 0x04; // Bit 2
43
+ const uint8_t STATUS_LED_ERROR = 0x08; // Bit 3
44
+
45
+ const uint16_t WARN_IF_BLOCKING_OVER_MS = 50U; ///< Initial blocking time allowed without warning
46
+ const uint16_t WARN_IF_BLOCKING_INCREMENT_MS = 10U; ///< How long the blocking time must be larger to warn again
44
47
 
45
48
  uint32_t global_state = 0; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
46
49
 
@@ -86,9 +89,9 @@ void Component::call_dump_config() {
86
89
  }
87
90
  }
88
91
 
89
- uint32_t Component::get_component_state() const { return this->component_state_; }
92
+ uint8_t Component::get_component_state() const { return this->component_state_; }
90
93
  void Component::call() {
91
- uint32_t state = this->component_state_ & COMPONENT_STATE_MASK;
94
+ uint8_t state = this->component_state_ & COMPONENT_STATE_MASK;
92
95
  switch (state) {
93
96
  case COMPONENT_STATE_CONSTRUCTION:
94
97
  // State Construction: Call setup and set state to setup
@@ -120,7 +123,13 @@ const char *Component::get_component_source() const {
120
123
  }
121
124
  bool Component::should_warn_of_blocking(uint32_t blocking_time) {
122
125
  if (blocking_time > this->warn_if_blocking_over_) {
123
- this->warn_if_blocking_over_ = blocking_time + WARN_IF_BLOCKING_INCREMENT_MS;
126
+ // Prevent overflow when adding increment - if we're about to overflow, just max out
127
+ if (blocking_time + WARN_IF_BLOCKING_INCREMENT_MS < blocking_time ||
128
+ blocking_time + WARN_IF_BLOCKING_INCREMENT_MS > std::numeric_limits<uint16_t>::max()) {
129
+ this->warn_if_blocking_over_ = std::numeric_limits<uint16_t>::max();
130
+ } else {
131
+ this->warn_if_blocking_over_ = static_cast<uint16_t>(blocking_time + WARN_IF_BLOCKING_INCREMENT_MS);
132
+ }
124
133
  return true;
125
134
  }
126
135
  return false;
@@ -131,6 +140,18 @@ void Component::mark_failed() {
131
140
  this->component_state_ |= COMPONENT_STATE_FAILED;
132
141
  this->status_set_error();
133
142
  }
143
+ void Component::reset_to_construction_state() {
144
+ if ((this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED) {
145
+ ESP_LOGI(TAG, "Component %s is being reset to construction state.", this->get_component_source());
146
+ this->component_state_ &= ~COMPONENT_STATE_MASK;
147
+ this->component_state_ |= COMPONENT_STATE_CONSTRUCTION;
148
+ // Clear error status when resetting
149
+ this->status_clear_error();
150
+ }
151
+ }
152
+ bool Component::is_in_loop_state() const {
153
+ return (this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_LOOP;
154
+ }
134
155
  void Component::defer(std::function<void()> &&f) { // NOLINT
135
156
  App.scheduler.set_timeout(this, "", 0, std::move(f));
136
157
  }
esphome/core/component.h CHANGED
@@ -53,19 +53,19 @@ static const uint32_t SCHEDULER_DONT_RUN = 4294967295UL;
53
53
  ESP_LOGCONFIG(TAG, " Update Interval: %.1fs", this->get_update_interval() / 1000.0f); \
54
54
  }
55
55
 
56
- extern const uint32_t COMPONENT_STATE_MASK;
57
- extern const uint32_t COMPONENT_STATE_CONSTRUCTION;
58
- extern const uint32_t COMPONENT_STATE_SETUP;
59
- extern const uint32_t COMPONENT_STATE_LOOP;
60
- extern const uint32_t COMPONENT_STATE_FAILED;
61
- extern const uint32_t STATUS_LED_MASK;
62
- extern const uint32_t STATUS_LED_OK;
63
- extern const uint32_t STATUS_LED_WARNING;
64
- extern const uint32_t STATUS_LED_ERROR;
56
+ extern const uint8_t COMPONENT_STATE_MASK;
57
+ extern const uint8_t COMPONENT_STATE_CONSTRUCTION;
58
+ extern const uint8_t COMPONENT_STATE_SETUP;
59
+ extern const uint8_t COMPONENT_STATE_LOOP;
60
+ extern const uint8_t COMPONENT_STATE_FAILED;
61
+ extern const uint8_t STATUS_LED_MASK;
62
+ extern const uint8_t STATUS_LED_OK;
63
+ extern const uint8_t STATUS_LED_WARNING;
64
+ extern const uint8_t STATUS_LED_ERROR;
65
65
 
66
66
  enum class RetryResult { DONE, RETRY };
67
67
 
68
- extern const uint32_t WARN_IF_BLOCKING_OVER_MS;
68
+ extern const uint16_t WARN_IF_BLOCKING_OVER_MS;
69
69
 
70
70
  class Component {
71
71
  public:
@@ -110,7 +110,32 @@ class Component {
110
110
  virtual void on_shutdown() {}
111
111
  virtual void on_safe_shutdown() {}
112
112
 
113
- uint32_t get_component_state() const;
113
+ /** Called during teardown to allow component to gracefully finish operations.
114
+ *
115
+ * @return true if teardown is complete, false if more time is needed
116
+ */
117
+ virtual bool teardown() { return true; }
118
+
119
+ /** Called after teardown is complete to power down hardware.
120
+ *
121
+ * This is called after all components have finished their teardown process,
122
+ * making it safe to power down hardware like ethernet PHY.
123
+ */
124
+ virtual void on_powerdown() {}
125
+
126
+ uint8_t get_component_state() const;
127
+
128
+ /** Reset this component back to the construction state to allow setup to run again.
129
+ *
130
+ * This can be used by components that have recoverable failures to attempt setup again.
131
+ */
132
+ void reset_to_construction_state();
133
+
134
+ /** Check if this component has completed setup and is in the loop state.
135
+ *
136
+ * @return True if in loop state, false otherwise.
137
+ */
138
+ bool is_in_loop_state() const;
114
139
 
115
140
  /** Mark this component as failed. Any future timeouts/intervals/setup/loop will no longer be called.
116
141
  *
@@ -285,10 +310,15 @@ class Component {
285
310
  /// Cancel a defer callback using the specified name, name must not be empty.
286
311
  bool cancel_defer(const std::string &name); // NOLINT
287
312
 
288
- uint32_t component_state_{0x0000}; ///< State of this component.
313
+ /// State of this component - each bit has a purpose:
314
+ /// Bits 0-1: Component state (0x00=CONSTRUCTION, 0x01=SETUP, 0x02=LOOP, 0x03=FAILED)
315
+ /// Bit 2: STATUS_LED_WARNING
316
+ /// Bit 3: STATUS_LED_ERROR
317
+ /// Bits 4-7: Unused - reserved for future expansion (50% of the bits are free)
318
+ uint8_t component_state_{0x00};
289
319
  float setup_priority_override_{NAN};
290
320
  const char *component_source_{nullptr};
291
- uint32_t warn_if_blocking_over_{WARN_IF_BLOCKING_OVER_MS};
321
+ uint16_t warn_if_blocking_over_{WARN_IF_BLOCKING_OVER_MS}; ///< Warn if blocked for this many ms (max 65.5s)
292
322
  std::string error_message_{};
293
323
  };
294
324
 
esphome/core/config.py CHANGED
@@ -329,6 +329,12 @@ async def _add_automations(config):
329
329
  await automation.build_automation(trigger, [], conf)
330
330
 
331
331
 
332
+ @coroutine_with_priority(-100.0)
333
+ async def _add_platform_reserves() -> None:
334
+ for platform_name, count in sorted(CORE.platform_counts.items()):
335
+ cg.add(cg.RawStatement(f"App.reserve_{platform_name}({count});"), prepend=True)
336
+
337
+
332
338
  @coroutine_with_priority(100.0)
333
339
  async def to_code(config):
334
340
  cg.add_global(cg.global_ns.namespace("esphome").using)
@@ -347,6 +353,12 @@ async def to_code(config):
347
353
  config[CONF_NAME_ADD_MAC_SUFFIX],
348
354
  )
349
355
  )
356
+ # Reserve space for components to avoid reallocation during registration
357
+ cg.add(
358
+ cg.RawStatement(f"App.reserve_components({len(CORE.component_ids)});"),
359
+ )
360
+
361
+ CORE.add_job(_add_platform_reserves)
350
362
 
351
363
  CORE.add_job(_add_automations, config)
352
364
 
esphome/core/defines.h CHANGED
@@ -95,6 +95,7 @@
95
95
 
96
96
  // Feature flags which do not work for zephyr
97
97
  #ifndef USE_ZEPHYR
98
+ #define USE_AUDIO_DAC
98
99
  #define USE_AUDIO_FLAC_SUPPORT
99
100
  #define USE_AUDIO_MP3_SUPPORT
100
101
  #define USE_API
@@ -139,6 +140,7 @@
139
140
  #define USE_MICROPHONE
140
141
  #define USE_PSRAM
141
142
  #define USE_SOCKET_IMPL_BSD_SOCKETS
143
+ #define USE_SOCKET_SELECT_SUPPORT
142
144
  #define USE_SPEAKER
143
145
  #define USE_SPI
144
146
  #define USE_VOICE_ASSISTANT
@@ -152,15 +154,19 @@
152
154
  #endif
153
155
 
154
156
  #ifdef USE_ESP_IDF
155
- #define USE_ESP_IDF_VERSION_CODE VERSION_CODE(5, 1, 6)
157
+ #define USE_ESP_IDF_VERSION_CODE VERSION_CODE(5, 3, 2)
156
158
  #define USE_MICRO_WAKE_WORD
157
159
  #define USE_MICRO_WAKE_WORD_VAD
160
+ #if defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
161
+ #define USE_OPENTHREAD
162
+ #endif
158
163
  #endif
159
164
 
160
165
  #if defined(USE_ESP32_VARIANT_ESP32S2)
161
166
  #define USE_LOGGER_USB_CDC
162
167
  #elif defined(USE_ESP32_VARIANT_ESP32S3) || defined(USE_ESP32_VARIANT_ESP32C3) || \
163
- defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2)
168
+ defined(USE_ESP32_VARIANT_ESP32C5) || defined(USE_ESP32_VARIANT_ESP32C6) || defined(USE_ESP32_VARIANT_ESP32H2) || \
169
+ defined(USE_ESP32_VARIANT_ESP32P4)
164
170
  #define USE_LOGGER_USB_CDC
165
171
  #define USE_LOGGER_USB_SERIAL_JTAG
166
172
  #endif
@@ -197,12 +203,14 @@
197
203
  #ifdef USE_LIBRETINY
198
204
  #define USE_CAPTIVE_PORTAL
199
205
  #define USE_SOCKET_IMPL_LWIP_SOCKETS
206
+ #define USE_SOCKET_SELECT_SUPPORT
200
207
  #define USE_WEBSERVER
201
208
  #define USE_WEBSERVER_PORT 80 // NOLINT
202
209
  #endif
203
210
 
204
211
  #ifdef USE_HOST
205
212
  #define USE_SOCKET_IMPL_BSD_SOCKETS
213
+ #define USE_SOCKET_SELECT_SUPPORT
206
214
  #endif
207
215
 
208
216
  // Disabled feature flags
@@ -12,20 +12,12 @@ void EntityBase::set_name(const char *name) {
12
12
  this->name_ = StringRef(name);
13
13
  if (this->name_.empty()) {
14
14
  this->name_ = StringRef(App.get_friendly_name());
15
- this->has_own_name_ = false;
15
+ this->flags_.has_own_name = false;
16
16
  } else {
17
- this->has_own_name_ = true;
17
+ this->flags_.has_own_name = true;
18
18
  }
19
19
  }
20
20
 
21
- // Entity Internal
22
- bool EntityBase::is_internal() const { return this->internal_; }
23
- void EntityBase::set_internal(bool internal) { this->internal_ = internal; }
24
-
25
- // Entity Disabled by Default
26
- bool EntityBase::is_disabled_by_default() const { return this->disabled_by_default_; }
27
- void EntityBase::set_disabled_by_default(bool disabled_by_default) { this->disabled_by_default_ = disabled_by_default; }
28
-
29
21
  // Entity Icon
30
22
  std::string EntityBase::get_icon() const {
31
23
  if (this->icon_c_str_ == nullptr) {
@@ -35,14 +27,10 @@ std::string EntityBase::get_icon() const {
35
27
  }
36
28
  void EntityBase::set_icon(const char *icon) { this->icon_c_str_ = icon; }
37
29
 
38
- // Entity Category
39
- EntityCategory EntityBase::get_entity_category() const { return this->entity_category_; }
40
- void EntityBase::set_entity_category(EntityCategory entity_category) { this->entity_category_ = entity_category; }
41
-
42
30
  // Entity Object ID
43
31
  std::string EntityBase::get_object_id() const {
44
32
  // Check if `App.get_friendly_name()` is constant or dynamic.
45
- if (!this->has_own_name_ && App.is_name_add_mac_suffix_enabled()) {
33
+ if (!this->flags_.has_own_name && App.is_name_add_mac_suffix_enabled()) {
46
34
  // `App.get_friendly_name()` is dynamic.
47
35
  return str_sanitize(str_snake_case(App.get_friendly_name()));
48
36
  } else {
@@ -61,7 +49,7 @@ void EntityBase::set_object_id(const char *object_id) {
61
49
  // Calculate Object ID Hash from Entity Name
62
50
  void EntityBase::calc_object_id_() {
63
51
  // Check if `App.get_friendly_name()` is constant or dynamic.
64
- if (!this->has_own_name_ && App.is_name_add_mac_suffix_enabled()) {
52
+ if (!this->flags_.has_own_name && App.is_name_add_mac_suffix_enabled()) {
65
53
  // `App.get_friendly_name()` is dynamic.
66
54
  const auto object_id = str_sanitize(str_snake_case(App.get_friendly_name()));
67
55
  // FNV-1 hash
@@ -20,7 +20,7 @@ class EntityBase {
20
20
  void set_name(const char *name);
21
21
 
22
22
  // Get whether this Entity has its own name or it should use the device friendly_name.
23
- bool has_own_name() const { return this->has_own_name_; }
23
+ bool has_own_name() const { return this->flags_.has_own_name; }
24
24
 
25
25
  // Get the sanitized name of this Entity as an ID.
26
26
  std::string get_object_id() const;
@@ -29,24 +29,32 @@ class EntityBase {
29
29
  // Get the unique Object ID of this Entity
30
30
  uint32_t get_object_id_hash();
31
31
 
32
- // Get/set whether this Entity should be hidden from outside of ESPHome
33
- bool is_internal() const;
34
- void set_internal(bool internal);
32
+ // Get/set whether this Entity should be hidden outside ESPHome
33
+ bool is_internal() const { return this->flags_.internal; }
34
+ void set_internal(bool internal) { this->flags_.internal = internal; }
35
35
 
36
36
  // Check if this object is declared to be disabled by default.
37
37
  // That means that when the device gets added to Home Assistant (or other clients) it should
38
38
  // not be added to the default view by default, and a user action is necessary to manually add it.
39
- bool is_disabled_by_default() const;
40
- void set_disabled_by_default(bool disabled_by_default);
39
+ bool is_disabled_by_default() const { return this->flags_.disabled_by_default; }
40
+ void set_disabled_by_default(bool disabled_by_default) { this->flags_.disabled_by_default = disabled_by_default; }
41
41
 
42
42
  // Get/set the entity category.
43
- EntityCategory get_entity_category() const;
44
- void set_entity_category(EntityCategory entity_category);
43
+ EntityCategory get_entity_category() const { return static_cast<EntityCategory>(this->flags_.entity_category); }
44
+ void set_entity_category(EntityCategory entity_category) {
45
+ this->flags_.entity_category = static_cast<uint8_t>(entity_category);
46
+ }
45
47
 
46
48
  // Get/set this entity's icon
47
49
  std::string get_icon() const;
48
50
  void set_icon(const char *icon);
49
51
 
52
+ // Check if this entity has state
53
+ bool has_state() const { return this->flags_.has_state; }
54
+
55
+ // Set has_state - for components that need to manually set this
56
+ void set_has_state(bool state) { this->flags_.has_state = state; }
57
+
50
58
  protected:
51
59
  /// The hash_base() function has been deprecated. It is kept in this
52
60
  /// class for now, to prevent external components from not compiling.
@@ -56,11 +64,17 @@ class EntityBase {
56
64
  StringRef name_;
57
65
  const char *object_id_c_str_{nullptr};
58
66
  const char *icon_c_str_{nullptr};
59
- uint32_t object_id_hash_;
60
- bool has_own_name_{false};
61
- bool internal_{false};
62
- bool disabled_by_default_{false};
63
- EntityCategory entity_category_{ENTITY_CATEGORY_NONE};
67
+ uint32_t object_id_hash_{};
68
+
69
+ // Bit-packed flags to save memory (1 byte instead of 5)
70
+ struct EntityFlags {
71
+ uint8_t has_own_name : 1;
72
+ uint8_t internal : 1;
73
+ uint8_t disabled_by_default : 1;
74
+ uint8_t has_state : 1;
75
+ uint8_t entity_category : 2; // Supports up to 4 categories
76
+ uint8_t reserved : 2; // Reserved for future use
77
+ } flags_{};
64
78
  };
65
79
 
66
80
  class EntityBase_DeviceClass { // NOLINT(readability-identifier-naming)
esphome/core/hal.h CHANGED
@@ -24,6 +24,11 @@
24
24
  #define PROGMEM ICACHE_RODATA_ATTR
25
25
  #endif
26
26
 
27
+ #elif defined(USE_RP2040)
28
+
29
+ #define IRAM_ATTR __attribute__((noinline, long_call, section(".time_critical")))
30
+ #define PROGMEM
31
+
27
32
  #else
28
33
 
29
34
  #define IRAM_ATTR
esphome/core/helpers.cpp CHANGED
@@ -30,7 +30,6 @@
30
30
  #elif defined(USE_ESP_IDF)
31
31
  #include <freertos/FreeRTOS.h>
32
32
  #include <freertos/portmacro.h>
33
- #include "esp_mac.h"
34
33
  #include "esp_random.h"
35
34
  #include "esp_system.h"
36
35
  #elif defined(USE_RP2040)
@@ -45,6 +44,7 @@
45
44
  #endif
46
45
  #ifdef USE_ESP32
47
46
  #include "rom/crc.h"
47
+ #include "esp_mac.h"
48
48
  #include "esp_efuse.h"
49
49
  #include "esp_efuse_table.h"
50
50
  #endif
esphome/core/helpers.h CHANGED
@@ -192,15 +192,15 @@ bool random_bytes(uint8_t *data, size_t len);
192
192
  constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb) {
193
193
  return (static_cast<uint16_t>(msb) << 8) | (static_cast<uint16_t>(lsb));
194
194
  }
195
+ /// Encode a 24-bit value given three bytes in most to least significant byte order.
196
+ constexpr uint32_t encode_uint24(uint8_t byte1, uint8_t byte2, uint8_t byte3) {
197
+ return (static_cast<uint32_t>(byte1) << 16) | (static_cast<uint32_t>(byte2) << 8) | (static_cast<uint32_t>(byte3));
198
+ }
195
199
  /// Encode a 32-bit value given four bytes in most to least significant byte order.
196
200
  constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4) {
197
201
  return (static_cast<uint32_t>(byte1) << 24) | (static_cast<uint32_t>(byte2) << 16) |
198
202
  (static_cast<uint32_t>(byte3) << 8) | (static_cast<uint32_t>(byte4));
199
203
  }
200
- /// Encode a 24-bit value given three bytes in most to least significant byte order.
201
- constexpr uint32_t encode_uint24(uint8_t byte1, uint8_t byte2, uint8_t byte3) {
202
- return ((static_cast<uint32_t>(byte1) << 16) | (static_cast<uint32_t>(byte2) << 8) | (static_cast<uint32_t>(byte3)));
203
- }
204
204
 
205
205
  /// Encode a value from its constituent bytes (from most to least significant) in an array with length sizeof(T).
206
206
  template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0>
@@ -438,7 +438,7 @@ template<typename T, enable_if_t<std::is_unsigned<T>::value, int> = 0> std::stri
438
438
  }
439
439
 
440
440
  /// Return values for parse_on_off().
441
- enum ParseOnOffState {
441
+ enum ParseOnOffState : uint8_t {
442
442
  PARSE_NONE = 0,
443
443
  PARSE_ON,
444
444
  PARSE_OFF,
esphome/core/log.h CHANGED
@@ -1,5 +1,7 @@
1
1
  #pragma once
2
2
 
3
+ #include "log_const_en.h"
4
+
3
5
  #include <cassert>
4
6
  #include <cstdarg>
5
7
  // for PRIu32 and friends
@@ -0,0 +1,4 @@
1
+ #pragma once
2
+
3
+ #define ESP_LOG_MSG_COMM_FAIL "Communication failed"
4
+ #define ESP_LOG_MSG_COMM_FAIL_FOR "Communication failed for '%s'"
@@ -2,9 +2,9 @@
2
2
 
3
3
  #include "application.h"
4
4
  #include "esphome/core/defines.h"
5
- #include "esphome/core/log.h"
6
- #include "esphome/core/helpers.h"
7
5
  #include "esphome/core/hal.h"
6
+ #include "esphome/core/helpers.h"
7
+ #include "esphome/core/log.h"
8
8
  #include <algorithm>
9
9
  #include <cinttypes>
10
10
 
esphome/coroutine.py CHANGED
@@ -42,14 +42,13 @@ Here everything is combined in `yield` expressions. You await other coroutines u
42
42
  the last `yield` expression defines what is returned.
43
43
  """
44
44
 
45
- import collections
46
- from collections.abc import Awaitable, Generator, Iterator
45
+ from collections.abc import Awaitable, Callable, Generator, Iterator
47
46
  import functools
48
47
  import heapq
49
48
  import inspect
50
49
  import logging
51
50
  import types
52
- from typing import Any, Callable
51
+ from typing import Any
53
52
 
54
53
  _LOGGER = logging.getLogger(__name__)
55
54
 
@@ -126,7 +125,7 @@ def _flatten_generator(gen: Generator[Any, Any, Any]):
126
125
  ret = to_send if e.value is None else e.value
127
126
  return ret
128
127
 
129
- if isinstance(val, collections.abc.Awaitable):
128
+ if isinstance(val, Awaitable):
130
129
  # yielded object that is awaitable (like `yield some_new_style_method()`)
131
130
  # yield from __await__() like actual coroutines would.
132
131
  to_send = yield from val.__await__()
esphome/cpp_generator.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import abc
2
- from collections.abc import Sequence
2
+ from collections.abc import Callable, Sequence
3
3
  import inspect
4
4
  import math
5
5
  import re
6
- from typing import Any, Callable, Optional, Union
6
+ from typing import Any
7
7
 
8
8
  from esphome.core import (
9
9
  CORE,
@@ -35,19 +35,19 @@ class Expression(abc.ABC):
35
35
  """
36
36
 
37
37
 
38
- SafeExpType = Union[
39
- Expression,
40
- bool,
41
- str,
42
- str,
43
- int,
44
- float,
45
- TimePeriod,
46
- type[bool],
47
- type[int],
48
- type[float],
49
- Sequence[Any],
50
- ]
38
+ SafeExpType = (
39
+ Expression
40
+ | bool
41
+ | str
42
+ | str
43
+ | int
44
+ | float
45
+ | TimePeriod
46
+ | type[bool]
47
+ | type[int]
48
+ | type[float]
49
+ | Sequence[Any]
50
+ )
51
51
 
52
52
 
53
53
  class RawExpression(Expression):
@@ -90,7 +90,7 @@ class VariableDeclarationExpression(Expression):
90
90
  class ExpressionList(Expression):
91
91
  __slots__ = ("args",)
92
92
 
93
- def __init__(self, *args: Optional[SafeExpType]):
93
+ def __init__(self, *args: SafeExpType | None):
94
94
  # Remove every None on end
95
95
  args = list(args)
96
96
  while args and args[-1] is None:
@@ -139,7 +139,7 @@ class CallExpression(Expression):
139
139
  class StructInitializer(Expression):
140
140
  __slots__ = ("base", "args")
141
141
 
142
- def __init__(self, base: Expression, *args: tuple[str, Optional[SafeExpType]]):
142
+ def __init__(self, base: Expression, *args: tuple[str, SafeExpType | None]):
143
143
  self.base = base
144
144
  # TODO: args is always a Tuple, is this check required?
145
145
  if not isinstance(args, OrderedDict):
@@ -197,9 +197,7 @@ class ParameterExpression(Expression):
197
197
  class ParameterListExpression(Expression):
198
198
  __slots__ = ("parameters",)
199
199
 
200
- def __init__(
201
- self, *parameters: Union[ParameterExpression, tuple[SafeExpType, str]]
202
- ):
200
+ def __init__(self, *parameters: ParameterExpression | tuple[SafeExpType, str]):
203
201
  self.parameters = []
204
202
  for parameter in parameters:
205
203
  if not isinstance(parameter, ParameterExpression):
@@ -362,7 +360,7 @@ def safe_exp(obj: SafeExpType) -> Expression:
362
360
  return IntLiteral(int(obj.total_seconds))
363
361
  if isinstance(obj, TimePeriodMinutes):
364
362
  return IntLiteral(int(obj.total_minutes))
365
- if isinstance(obj, (tuple, list)):
363
+ if isinstance(obj, tuple | list):
366
364
  return ArrayInitializer(*[safe_exp(o) for o in obj])
367
365
  if obj is bool:
368
366
  return bool_
@@ -418,7 +416,9 @@ class LineComment(Statement):
418
416
  self.value = value
419
417
 
420
418
  def __str__(self):
421
- parts = re.sub(r"\\\s*\n", r"<cont>\n", self.value, re.MULTILINE).split("\n")
419
+ parts = re.sub(r"\\\s*\n", r"<cont>\n", self.value, flags=re.MULTILINE).split(
420
+ "\n"
421
+ )
422
422
  parts = [f"// {x}" for x in parts]
423
423
  return "\n".join(parts)
424
424
 
@@ -461,7 +461,7 @@ def static_const_array(id_, rhs) -> "MockObj":
461
461
  return obj
462
462
 
463
463
 
464
- def statement(expression: Union[Expression, Statement]) -> Statement:
464
+ def statement(expression: Expression | Statement) -> Statement:
465
465
  """Convert expression into a statement unless is already a statement."""
466
466
  if isinstance(expression, Statement):
467
467
  return expression
@@ -579,21 +579,21 @@ def new_Pvariable(id_: ID, *args: SafeExpType) -> Pvariable:
579
579
  return Pvariable(id_, rhs)
580
580
 
581
581
 
582
- def add(expression: Union[Expression, Statement]):
582
+ def add(expression: Expression | Statement, prepend: bool = False):
583
583
  """Add an expression to the codegen section.
584
584
 
585
585
  After this is called, the given given expression will
586
586
  show up in the setup() function after this has been called.
587
587
  """
588
- CORE.add(expression)
588
+ CORE.add(expression, prepend)
589
589
 
590
590
 
591
- def add_global(expression: Union[SafeExpType, Statement], prepend: bool = False):
591
+ def add_global(expression: SafeExpType | Statement, prepend: bool = False):
592
592
  """Add an expression to the codegen global storage (above setup())."""
593
593
  CORE.add_global(expression, prepend)
594
594
 
595
595
 
596
- def add_library(name: str, version: Optional[str], repository: Optional[str] = None):
596
+ def add_library(name: str, version: str | None, repository: str | None = None):
597
597
  """Add a library to the codegen library storage.
598
598
 
599
599
  :param name: The name of the library (for example 'AsyncTCP')
@@ -619,7 +619,7 @@ def add_define(name: str, value: SafeExpType = None):
619
619
  CORE.add_define(Define(name, safe_exp(value)))
620
620
 
621
621
 
622
- def add_platformio_option(key: str, value: Union[str, list[str]]):
622
+ def add_platformio_option(key: str, value: str | list[str]):
623
623
  CORE.add_platformio_option(key, value)
624
624
 
625
625
 
@@ -654,7 +654,7 @@ async def process_lambda(
654
654
  parameters: list[tuple[SafeExpType, str]],
655
655
  capture: str = "=",
656
656
  return_type: SafeExpType = None,
657
- ) -> Union[LambdaExpression, None]:
657
+ ) -> LambdaExpression | None:
658
658
  """Process the given lambda value into a LambdaExpression.
659
659
 
660
660
  This is a coroutine because lambdas can depend on other IDs,
@@ -711,8 +711,8 @@ def is_template(value):
711
711
  async def templatable(
712
712
  value: Any,
713
713
  args: list[tuple[SafeExpType, str]],
714
- output_type: Optional[SafeExpType],
715
- to_exp: Union[Callable, dict] = None,
714
+ output_type: SafeExpType | None,
715
+ to_exp: Callable | dict = None,
716
716
  ):
717
717
  """Generate code for a templatable config option.
718
718
 
@@ -821,7 +821,7 @@ class MockObj(Expression):
821
821
  assert self.op == "::"
822
822
  return MockObj(f"using namespace {self.base}")
823
823
 
824
- def __getitem__(self, item: Union[str, Expression]) -> "MockObj":
824
+ def __getitem__(self, item: str | Expression) -> "MockObj":
825
825
  next_op = "."
826
826
  if isinstance(item, str) and item.startswith("P"):
827
827
  item = item[1:]
esphome/dashboard/core.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
- from collections.abc import Coroutine
4
+ from collections.abc import Callable, Coroutine
5
5
  import contextlib
6
6
  from dataclasses import dataclass
7
7
  from functools import partial
@@ -9,7 +9,7 @@ import json
9
9
  import logging
10
10
  from pathlib import Path
11
11
  import threading
12
- from typing import Any, Callable
12
+ from typing import Any
13
13
 
14
14
  from esphome.storage_json import ignored_devices_storage_path
15
15