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
@@ -39,7 +39,7 @@ void BluetoothProxy::send_bluetooth_scanner_state_(esp32_ble_tracker::ScannerSta
39
39
  resp.state = static_cast<api::enums::BluetoothScannerState>(state);
40
40
  resp.mode = this->parent_->get_scan_active() ? api::enums::BluetoothScannerMode::BLUETOOTH_SCANNER_MODE_ACTIVE
41
41
  : api::enums::BluetoothScannerMode::BLUETOOTH_SCANNER_MODE_PASSIVE;
42
- this->api_connection_->send_bluetooth_scanner_state_response(resp);
42
+ this->api_connection_->send_message(resp);
43
43
  }
44
44
 
45
45
  bool BluetoothProxy::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
@@ -58,7 +58,7 @@ static std::vector<api::BluetoothLERawAdvertisement> &get_batch_buffer() {
58
58
  return batch_buffer;
59
59
  }
60
60
 
61
- bool BluetoothProxy::parse_devices(esp_ble_gap_cb_param_t::ble_scan_result_evt_param *advertisements, size_t count) {
61
+ bool BluetoothProxy::parse_devices(const esp32_ble::BLEScanResult *scan_results, size_t count) {
62
62
  if (!api::global_api_server->is_connected() || this->api_connection_ == nullptr || !this->raw_advertisements_)
63
63
  return false;
64
64
 
@@ -73,7 +73,7 @@ bool BluetoothProxy::parse_devices(esp_ble_gap_cb_param_t::ble_scan_result_evt_p
73
73
 
74
74
  // Add new advertisements to the batch buffer
75
75
  for (size_t i = 0; i < count; i++) {
76
- auto &result = advertisements[i];
76
+ auto &result = scan_results[i];
77
77
  uint8_t length = result.adv_data_len + result.scan_rsp_len;
78
78
 
79
79
  batch_buffer.emplace_back();
@@ -103,7 +103,7 @@ void BluetoothProxy::flush_pending_advertisements() {
103
103
 
104
104
  api::BluetoothLERawAdvertisementsResponse resp;
105
105
  resp.advertisements.swap(batch_buffer);
106
- this->api_connection_->send_bluetooth_le_raw_advertisements_response(resp);
106
+ this->api_connection_->send_message(resp);
107
107
  }
108
108
 
109
109
  void BluetoothProxy::send_api_packet_(const esp32_ble_tracker::ESPBTDevice &device) {
@@ -141,14 +141,16 @@ void BluetoothProxy::send_api_packet_(const esp32_ble_tracker::ESPBTDevice &devi
141
141
  manufacturer_data.data.assign(data.data.begin(), data.data.end());
142
142
  }
143
143
 
144
- this->api_connection_->send_bluetooth_le_advertisement(resp);
144
+ this->api_connection_->send_message(resp);
145
145
  }
146
146
 
147
147
  void BluetoothProxy::dump_config() {
148
148
  ESP_LOGCONFIG(TAG, "Bluetooth Proxy:");
149
- ESP_LOGCONFIG(TAG, " Active: %s", YESNO(this->active_));
150
- ESP_LOGCONFIG(TAG, " Connections: %d", this->connections_.size());
151
- ESP_LOGCONFIG(TAG, " Raw advertisements: %s", YESNO(this->raw_advertisements_));
149
+ ESP_LOGCONFIG(TAG,
150
+ " Active: %s\n"
151
+ " Connections: %d\n"
152
+ " Raw advertisements: %s",
153
+ YESNO(this->active_), this->connections_.size(), YESNO(this->raw_advertisements_));
152
154
  }
153
155
 
154
156
  int BluetoothProxy::get_bluetooth_connections_free() {
@@ -300,7 +302,7 @@ void BluetoothProxy::loop() {
300
302
  service_resp.characteristics.push_back(std::move(characteristic_resp));
301
303
  }
302
304
  resp.services.push_back(std::move(service_resp));
303
- this->api_connection_->send_bluetooth_gatt_get_services_response(resp);
305
+ this->api_connection_->send_message(resp);
304
306
  }
305
307
  }
306
308
  }
@@ -453,7 +455,7 @@ void BluetoothProxy::bluetooth_device_request(const api::BluetoothDeviceRequest
453
455
  call.success = ret == ESP_OK;
454
456
  call.error = ret;
455
457
 
456
- this->api_connection_->send_bluetooth_device_clear_cache_response(call);
458
+ this->api_connection_->send_message(call);
457
459
 
458
460
  break;
459
461
  }
@@ -577,7 +579,7 @@ void BluetoothProxy::send_device_connection(uint64_t address, bool connected, ui
577
579
  call.connected = connected;
578
580
  call.mtu = mtu;
579
581
  call.error = error;
580
- this->api_connection_->send_bluetooth_device_connection_response(call);
582
+ this->api_connection_->send_message(call);
581
583
  }
582
584
  void BluetoothProxy::send_connections_free() {
583
585
  if (this->api_connection_ == nullptr)
@@ -590,7 +592,7 @@ void BluetoothProxy::send_connections_free() {
590
592
  call.allocated.push_back(connection->address_);
591
593
  }
592
594
  }
593
- this->api_connection_->send_bluetooth_connections_free_response(call);
595
+ this->api_connection_->send_message(call);
594
596
  }
595
597
 
596
598
  void BluetoothProxy::send_gatt_services_done(uint64_t address) {
@@ -598,7 +600,7 @@ void BluetoothProxy::send_gatt_services_done(uint64_t address) {
598
600
  return;
599
601
  api::BluetoothGATTGetServicesDoneResponse call;
600
602
  call.address = address;
601
- this->api_connection_->send_bluetooth_gatt_get_services_done_response(call);
603
+ this->api_connection_->send_message(call);
602
604
  }
603
605
 
604
606
  void BluetoothProxy::send_gatt_error(uint64_t address, uint16_t handle, esp_err_t error) {
@@ -608,7 +610,7 @@ void BluetoothProxy::send_gatt_error(uint64_t address, uint16_t handle, esp_err_
608
610
  call.address = address;
609
611
  call.handle = handle;
610
612
  call.error = error;
611
- this->api_connection_->send_bluetooth_gatt_error_response(call);
613
+ this->api_connection_->send_message(call);
612
614
  }
613
615
 
614
616
  void BluetoothProxy::send_device_pairing(uint64_t address, bool paired, esp_err_t error) {
@@ -617,7 +619,7 @@ void BluetoothProxy::send_device_pairing(uint64_t address, bool paired, esp_err_
617
619
  call.paired = paired;
618
620
  call.error = error;
619
621
 
620
- this->api_connection_->send_bluetooth_device_pairing_response(call);
622
+ this->api_connection_->send_message(call);
621
623
  }
622
624
 
623
625
  void BluetoothProxy::send_device_unpairing(uint64_t address, bool success, esp_err_t error) {
@@ -626,7 +628,7 @@ void BluetoothProxy::send_device_unpairing(uint64_t address, bool success, esp_e
626
628
  call.success = success;
627
629
  call.error = error;
628
630
 
629
- this->api_connection_->send_bluetooth_device_unpairing_response(call);
631
+ this->api_connection_->send_message(call);
630
632
  }
631
633
 
632
634
  void BluetoothProxy::bluetooth_scanner_set_mode(bool active) {
@@ -52,7 +52,7 @@ class BluetoothProxy : public esp32_ble_tracker::ESPBTDeviceListener, public Com
52
52
  public:
53
53
  BluetoothProxy();
54
54
  bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
55
- bool parse_devices(esp_ble_gap_cb_param_t::ble_scan_result_evt_param *advertisements, size_t count) override;
55
+ bool parse_devices(const esp32_ble::BLEScanResult *scan_results, size_t count) override;
56
56
  void dump_config() override;
57
57
  void setup() override;
58
58
  void loop() override;
@@ -88,14 +88,13 @@ const char *oversampling_to_str(BME280Oversampling oversampling) { // NOLINT
88
88
  }
89
89
 
90
90
  void BME280Component::setup() {
91
- ESP_LOGCONFIG(TAG, "Setting up BME280...");
91
+ ESP_LOGCONFIG(TAG, "Running setup");
92
92
  uint8_t chip_id = 0;
93
93
 
94
94
  // Mark as not failed before initializing. Some devices will turn off sensors to save on batteries
95
95
  // and when they come back on, the COMPONENT_STATE_FAILED bit must be unset on the component.
96
- if ((this->component_state_ & COMPONENT_STATE_MASK) == COMPONENT_STATE_FAILED) {
97
- this->component_state_ &= ~COMPONENT_STATE_MASK;
98
- this->component_state_ |= COMPONENT_STATE_CONSTRUCTION;
96
+ if (this->is_failed()) {
97
+ this->reset_to_construction_state();
99
98
  }
100
99
 
101
100
  if (!this->read_byte(BME280_REGISTER_CHIPID, &chip_id)) {
@@ -182,7 +181,7 @@ void BME280Component::dump_config() {
182
181
  ESP_LOGCONFIG(TAG, "BME280:");
183
182
  switch (this->error_code_) {
184
183
  case COMMUNICATION_FAILED:
185
- ESP_LOGE(TAG, "Communication with BME280 failed!");
184
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
186
185
  break;
187
186
  case WRONG_CHIP_ID:
188
187
  ESP_LOGE(TAG, "BME280 has wrong chip ID! Is it a BME280?");
@@ -207,7 +206,7 @@ inline uint8_t oversampling_to_time(BME280Oversampling over_sampling) { return (
207
206
 
208
207
  void BME280Component::update() {
209
208
  // Enable sensor
210
- ESP_LOGV(TAG, "Sending conversion request...");
209
+ ESP_LOGV(TAG, "Sending conversion request");
211
210
  uint8_t meas_value = 0;
212
211
  meas_value |= (this->temperature_oversampling_ & 0b111) << 5;
213
212
  meas_value |= (this->pressure_oversampling_ & 0b111) << 2;
@@ -71,7 +71,7 @@ static const char *iir_filter_to_str(BME680IIRFilter filter) {
71
71
  }
72
72
 
73
73
  void BME680Component::setup() {
74
- ESP_LOGCONFIG(TAG, "Setting up BME680...");
74
+ ESP_LOGCONFIG(TAG, "Running setup");
75
75
  uint8_t chip_id;
76
76
  if (!this->read_byte(BME680_REGISTER_CHIPID, &chip_id) || chip_id != 0x61) {
77
77
  this->mark_failed();
@@ -215,7 +215,7 @@ void BME680Component::dump_config() {
215
215
  ESP_LOGCONFIG(TAG, "BME680:");
216
216
  LOG_I2C_DEVICE(this);
217
217
  if (this->is_failed()) {
218
- ESP_LOGE(TAG, "Communication with BME680 failed!");
218
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
219
219
  }
220
220
  ESP_LOGCONFIG(TAG, " IIR Filter: %s", iir_filter_to_str(this->iir_filter_));
221
221
  LOG_UPDATE_INTERVAL(this);
@@ -307,7 +307,7 @@ void BME680Component::read_data_() {
307
307
  this->humidity_sensor_->publish_state(NAN);
308
308
  if (this->gas_resistance_sensor_ != nullptr)
309
309
  this->gas_resistance_sensor_->publish_state(NAN);
310
- ESP_LOGW(TAG, "Communication with BME680 failed!");
310
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
311
311
  this->status_set_warning();
312
312
  return;
313
313
  }
@@ -13,7 +13,7 @@ from esphome.const import (
13
13
  CONF_PRESSURE,
14
14
  CONF_TEMPERATURE,
15
15
  DEVICE_CLASS_HUMIDITY,
16
- DEVICE_CLASS_PRESSURE,
16
+ DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
17
17
  DEVICE_CLASS_TEMPERATURE,
18
18
  ICON_GAS_CYLINDER,
19
19
  STATE_CLASS_MEASUREMENT,
@@ -71,7 +71,7 @@ CONFIG_SCHEMA = (
71
71
  cv.Optional(CONF_PRESSURE): sensor.sensor_schema(
72
72
  unit_of_measurement=UNIT_HECTOPASCAL,
73
73
  accuracy_decimals=1,
74
- device_class=DEVICE_CLASS_PRESSURE,
74
+ device_class=DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
75
75
  state_class=STATE_CLASS_MEASUREMENT,
76
76
  ).extend(
77
77
  {
@@ -1,6 +1,6 @@
1
1
  #include "bme680_bsec.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/helpers.h"
3
+ #include "esphome/core/log.h"
4
4
  #include <string>
5
5
 
6
6
  namespace esphome {
@@ -15,7 +15,7 @@ std::vector<BME680BSECComponent *>
15
15
  uint8_t BME680BSECComponent::work_buffer_[BSEC_MAX_WORKBUFFER_SIZE] = {0};
16
16
 
17
17
  void BME680BSECComponent::setup() {
18
- ESP_LOGCONFIG(TAG, "Setting up BME680(%s) via BSEC...", this->device_id_.c_str());
18
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->device_id_.c_str());
19
19
 
20
20
  uint8_t new_idx = BME680BSECComponent::instances.size();
21
21
  BME680BSECComponent::instances.push_back(this);
@@ -159,11 +159,15 @@ void BME680BSECComponent::dump_config() {
159
159
  this->bme680_status_);
160
160
  }
161
161
 
162
- ESP_LOGCONFIG(TAG, " Temperature Offset: %.2f", this->temperature_offset_);
163
- ESP_LOGCONFIG(TAG, " IAQ Mode: %s", this->iaq_mode_ == IAQ_MODE_STATIC ? "Static" : "Mobile");
164
- ESP_LOGCONFIG(TAG, " Supply Voltage: %sV", this->supply_voltage_ == SUPPLY_VOLTAGE_3V3 ? "3.3" : "1.8");
165
- ESP_LOGCONFIG(TAG, " Sample Rate: %s", BME680_BSEC_SAMPLE_RATE_LOG(this->sample_rate_));
166
- ESP_LOGCONFIG(TAG, " State Save Interval: %ims", this->state_save_interval_ms_);
162
+ ESP_LOGCONFIG(TAG,
163
+ " Temperature Offset: %.2f\n"
164
+ " IAQ Mode: %s\n"
165
+ " Supply Voltage: %sV\n"
166
+ " Sample Rate: %s\n"
167
+ " State Save Interval: %ims",
168
+ this->temperature_offset_, this->iaq_mode_ == IAQ_MODE_STATIC ? "Static" : "Mobile",
169
+ this->supply_voltage_ == SUPPLY_VOLTAGE_3V3 ? "3.3" : "1.8",
170
+ BME680_BSEC_SAMPLE_RATE_LOG(this->sample_rate_), this->state_save_interval_ms_);
167
171
 
168
172
  LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
169
173
  ESP_LOGCONFIG(TAG, " Sample Rate: %s", BME680_BSEC_SAMPLE_RATE_LOG(this->temperature_sample_rate_));
@@ -15,6 +15,8 @@ from esphome.const import (
15
15
  DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
16
16
  ICON_GAS_CYLINDER,
17
17
  ICON_GAUGE,
18
+ ICON_THERMOMETER,
19
+ ICON_WATER_PERCENT,
18
20
  STATE_CLASS_MEASUREMENT,
19
21
  UNIT_CELSIUS,
20
22
  UNIT_HECTOPASCAL,
@@ -27,11 +29,11 @@ from . import CONF_BME680_BSEC_ID, SAMPLE_RATE_OPTIONS, BME680BSECComponent
27
29
 
28
30
  DEPENDENCIES = ["bme680_bsec"]
29
31
 
30
- CONF_IAQ = "iaq"
31
- CONF_CO2_EQUIVALENT = "co2_equivalent"
32
32
  CONF_BREATH_VOC_EQUIVALENT = "breath_voc_equivalent"
33
- UNIT_IAQ = "IAQ"
33
+ CONF_CO2_EQUIVALENT = "co2_equivalent"
34
+ CONF_IAQ = "iaq"
34
35
  ICON_ACCURACY = "mdi:checkbox-marked-circle-outline"
36
+ UNIT_IAQ = "IAQ"
35
37
 
36
38
  TYPES = [
37
39
  CONF_TEMPERATURE,
@@ -49,6 +51,7 @@ CONFIG_SCHEMA = cv.Schema(
49
51
  cv.GenerateID(CONF_BME680_BSEC_ID): cv.use_id(BME680BSECComponent),
50
52
  cv.Optional(CONF_TEMPERATURE): sensor.sensor_schema(
51
53
  unit_of_measurement=UNIT_CELSIUS,
54
+ icon=ICON_THERMOMETER,
52
55
  accuracy_decimals=1,
53
56
  device_class=DEVICE_CLASS_TEMPERATURE,
54
57
  state_class=STATE_CLASS_MEASUREMENT,
@@ -65,6 +68,7 @@ CONFIG_SCHEMA = cv.Schema(
65
68
  ),
66
69
  cv.Optional(CONF_HUMIDITY): sensor.sensor_schema(
67
70
  unit_of_measurement=UNIT_PERCENT,
71
+ icon=ICON_WATER_PERCENT,
68
72
  accuracy_decimals=1,
69
73
  device_class=DEVICE_CLASS_HUMIDITY,
70
74
  state_class=STATE_CLASS_MEASUREMENT,
@@ -16,7 +16,7 @@ CODEOWNERS = ["@neffs", "@kbx81"]
16
16
 
17
17
  DOMAIN = "bme68x_bsec2"
18
18
 
19
- BSEC2_LIBRARY_VERSION = "v1.8.2610"
19
+ BSEC2_LIBRARY_VERSION = "1.10.2610"
20
20
 
21
21
  CONF_ALGORITHM_OUTPUT = "algorithm_output"
22
22
  CONF_BME68X_BSEC2_ID = "bme68x_bsec2_id"
@@ -145,7 +145,6 @@ CONFIG_SCHEMA_BASE = (
145
145
  ): cv.positive_time_period_minutes,
146
146
  },
147
147
  )
148
- .add_extra(cv.only_with_arduino)
149
148
  .add_extra(validate_bme68x)
150
149
  .add_extra(download_bme68x_blob)
151
150
  )
@@ -179,11 +178,13 @@ async def to_code_base(config):
179
178
  bsec2_arr = cg.progmem_array(config[CONF_RAW_DATA_ID], rhs)
180
179
  cg.add(var.set_bsec2_configuration(bsec2_arr, len(rhs)))
181
180
 
182
- # Although this component does not use SPI, the BSEC2 library requires the SPI library
183
- cg.add_library("SPI", None)
181
+ # Although this component does not use SPI, the BSEC2 Arduino library requires the SPI library
182
+ if core.CORE.using_arduino:
183
+ cg.add_library("SPI", None)
184
184
  cg.add_library(
185
185
  "BME68x Sensor library",
186
- "1.1.40407",
186
+ "1.3.40408",
187
+ "https://github.com/boschsensortec/Bosch-BME68x-Library",
187
188
  )
188
189
  cg.add_library(
189
190
  "BSEC2 Software Library",
@@ -1,4 +1,5 @@
1
1
  #include "esphome/core/defines.h"
2
+ #include "esphome/core/hal.h"
2
3
  #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
@@ -20,7 +21,7 @@ static const char *const TAG = "bme68x_bsec2.sensor";
20
21
  static const std::string IAQ_ACCURACY_STATES[4] = {"Stabilizing", "Uncertain", "Calibrating", "Calibrated"};
21
22
 
22
23
  void BME68xBSEC2Component::setup() {
23
- ESP_LOGCONFIG(TAG, "Setting up BME68X via BSEC2...");
24
+ ESP_LOGCONFIG(TAG, "Running setup");
24
25
 
25
26
  this->bsec_status_ = bsec_init_m(&this->bsec_instance_);
26
27
  if (this->bsec_status_ != BSEC_OK) {
@@ -57,13 +58,13 @@ void BME68xBSEC2Component::setup() {
57
58
  }
58
59
 
59
60
  void BME68xBSEC2Component::dump_config() {
60
- ESP_LOGCONFIG(TAG, "BME68X via BSEC2:");
61
-
62
- ESP_LOGCONFIG(TAG, " BSEC2 version: %d.%d.%d.%d", this->version_.major, this->version_.minor,
63
- this->version_.major_bugfix, this->version_.minor_bugfix);
64
-
65
- ESP_LOGCONFIG(TAG, " BSEC2 configuration blob:");
66
- ESP_LOGCONFIG(TAG, " Configured: %s", YESNO(this->bsec2_blob_configured_));
61
+ ESP_LOGCONFIG(TAG,
62
+ "BME68X via BSEC2:\n"
63
+ " BSEC2 version: %d.%d.%d.%d\n"
64
+ " BSEC2 configuration blob:\n"
65
+ " Configured: %s",
66
+ this->version_.major, this->version_.minor, this->version_.major_bugfix, this->version_.minor_bugfix,
67
+ YESNO(this->bsec2_blob_configured_));
67
68
  if (this->bsec2_configuration_ != nullptr && this->bsec2_configuration_length_) {
68
69
  ESP_LOGCONFIG(TAG, " Size: %" PRIu32, this->bsec2_configuration_length_);
69
70
  }
@@ -76,11 +77,14 @@ void BME68xBSEC2Component::dump_config() {
76
77
  if (this->algorithm_output_ != ALGORITHM_OUTPUT_IAQ) {
77
78
  ESP_LOGCONFIG(TAG, " Algorithm output: %s", BME68X_BSEC2_ALGORITHM_OUTPUT_LOG(this->algorithm_output_));
78
79
  }
79
- ESP_LOGCONFIG(TAG, " Operating age: %s", BME68X_BSEC2_OPERATING_AGE_LOG(this->operating_age_));
80
- ESP_LOGCONFIG(TAG, " Sample rate: %s", BME68X_BSEC2_SAMPLE_RATE_LOG(this->sample_rate_));
81
- ESP_LOGCONFIG(TAG, " Voltage: %s", BME68X_BSEC2_VOLTAGE_LOG(this->voltage_));
82
- ESP_LOGCONFIG(TAG, " State save interval: %ims", this->state_save_interval_ms_);
83
- ESP_LOGCONFIG(TAG, " Temperature offset: %.2f", this->temperature_offset_);
80
+ ESP_LOGCONFIG(TAG,
81
+ " Operating age: %s\n"
82
+ " Sample rate: %s\n"
83
+ " Voltage: %s\n"
84
+ " State save interval: %ims\n"
85
+ " Temperature offset: %.2f",
86
+ BME68X_BSEC2_OPERATING_AGE_LOG(this->operating_age_), BME68X_BSEC2_SAMPLE_RATE_LOG(this->sample_rate_),
87
+ BME68X_BSEC2_VOLTAGE_LOG(this->voltage_), this->state_save_interval_ms_, this->temperature_offset_);
84
88
 
85
89
  #ifdef USE_SENSOR
86
90
  LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
@@ -9,8 +9,10 @@ from esphome.const import (
9
9
  CONF_SAMPLE_RATE,
10
10
  CONF_TEMPERATURE,
11
11
  DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
12
+ DEVICE_CLASS_CARBON_DIOXIDE,
12
13
  DEVICE_CLASS_HUMIDITY,
13
14
  DEVICE_CLASS_TEMPERATURE,
15
+ DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
14
16
  ICON_GAS_CYLINDER,
15
17
  ICON_GAUGE,
16
18
  ICON_THERMOMETER,
@@ -32,7 +34,6 @@ CONF_CO2_EQUIVALENT = "co2_equivalent"
32
34
  CONF_IAQ = "iaq"
33
35
  CONF_IAQ_STATIC = "iaq_static"
34
36
  ICON_ACCURACY = "mdi:checkbox-marked-circle-outline"
35
- ICON_TEST_TUBE = "mdi:test-tube"
36
37
  UNIT_IAQ = "IAQ"
37
38
 
38
39
  TYPES = [
@@ -61,7 +62,6 @@ CONFIG_SCHEMA = cv.Schema(
61
62
  ),
62
63
  cv.Optional(CONF_PRESSURE): sensor.sensor_schema(
63
64
  unit_of_measurement=UNIT_HECTOPASCAL,
64
- icon=ICON_GAUGE,
65
65
  accuracy_decimals=1,
66
66
  device_class=DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
67
67
  state_class=STATE_CLASS_MEASUREMENT,
@@ -102,14 +102,14 @@ CONFIG_SCHEMA = cv.Schema(
102
102
  ),
103
103
  cv.Optional(CONF_CO2_EQUIVALENT): sensor.sensor_schema(
104
104
  unit_of_measurement=UNIT_PARTS_PER_MILLION,
105
- icon=ICON_TEST_TUBE,
106
105
  accuracy_decimals=1,
106
+ device_class=DEVICE_CLASS_CARBON_DIOXIDE,
107
107
  state_class=STATE_CLASS_MEASUREMENT,
108
108
  ),
109
109
  cv.Optional(CONF_BREATH_VOC_EQUIVALENT): sensor.sensor_schema(
110
110
  unit_of_measurement=UNIT_PARTS_PER_MILLION,
111
- icon=ICON_TEST_TUBE,
112
111
  accuracy_decimals=1,
112
+ device_class=DEVICE_CLASS_VOLATILE_ORGANIC_COMPOUNDS_PARTS,
113
113
  state_class=STATE_CLASS_MEASUREMENT,
114
114
  ),
115
115
  }
@@ -1,4 +1,5 @@
1
1
  #include "esphome/core/defines.h"
2
+ #include "esphome/core/hal.h"
2
3
  #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
@@ -119,44 +119,44 @@ const float GRAVITY_EARTH = 9.80665f;
119
119
  void BMI160Component::internal_setup_(int stage) {
120
120
  switch (stage) {
121
121
  case 0:
122
- ESP_LOGCONFIG(TAG, "Setting up BMI160...");
122
+ ESP_LOGCONFIG(TAG, "Running setup");
123
123
  uint8_t chipid;
124
124
  if (!this->read_byte(BMI160_REGISTER_CHIPID, &chipid) || (chipid != 0b11010001)) {
125
125
  this->mark_failed();
126
126
  return;
127
127
  }
128
128
 
129
- ESP_LOGV(TAG, " Bringing accelerometer out of sleep...");
129
+ ESP_LOGV(TAG, " Bringing accelerometer out of sleep");
130
130
  if (!this->write_byte(BMI160_REGISTER_CMD, (uint8_t) Cmd::ACCL_SET_PMU_MODE | (uint8_t) AcclPmuMode::NORMAL)) {
131
131
  this->mark_failed();
132
132
  return;
133
133
  }
134
- ESP_LOGV(TAG, " Waiting for accelerometer to wake up...");
134
+ ESP_LOGV(TAG, " Waiting for accelerometer to wake up");
135
135
  // need to wait (max delay in datasheet) because we can't send commands while another is in progress
136
136
  // min 5ms, 10ms
137
137
  this->set_timeout(10, [this]() { this->internal_setup_(1); });
138
138
  break;
139
139
 
140
140
  case 1:
141
- ESP_LOGV(TAG, " Bringing gyroscope out of sleep...");
141
+ ESP_LOGV(TAG, " Bringing gyroscope out of sleep");
142
142
  if (!this->write_byte(BMI160_REGISTER_CMD, (uint8_t) Cmd::GYRO_SET_PMU_MODE | (uint8_t) GyroPmuMode::NORMAL)) {
143
143
  this->mark_failed();
144
144
  return;
145
145
  }
146
- ESP_LOGV(TAG, " Waiting for gyroscope to wake up...");
146
+ ESP_LOGV(TAG, " Waiting for gyroscope to wake up");
147
147
  // wait between 51 & 81ms, doing 100 to be safe
148
148
  this->set_timeout(10, [this]() { this->internal_setup_(2); });
149
149
  break;
150
150
 
151
151
  case 2:
152
- ESP_LOGV(TAG, " Setting up Gyro Config...");
152
+ ESP_LOGV(TAG, " Setting up Gyro Config");
153
153
  uint8_t gyro_config = (uint8_t) GyroBandwidth::OSR4 | (uint8_t) GyroOuputDataRate::HZ_25;
154
154
  ESP_LOGV(TAG, " Output gyro_config: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(gyro_config));
155
155
  if (!this->write_byte(BMI160_REGISTER_GYRO_CONFIG, gyro_config)) {
156
156
  this->mark_failed();
157
157
  return;
158
158
  }
159
- ESP_LOGV(TAG, " Setting up Gyro Range...");
159
+ ESP_LOGV(TAG, " Setting up Gyro Range");
160
160
  uint8_t gyro_range = (uint8_t) GyroRange::RANGE_2000_DPS;
161
161
  ESP_LOGV(TAG, " Output gyro_range: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(gyro_range));
162
162
  if (!this->write_byte(BMI160_REGISTER_GYRO_RANGE, gyro_range)) {
@@ -164,7 +164,7 @@ void BMI160Component::internal_setup_(int stage) {
164
164
  return;
165
165
  }
166
166
 
167
- ESP_LOGV(TAG, " Setting up Accel Config...");
167
+ ESP_LOGV(TAG, " Setting up Accel Config");
168
168
  uint8_t accel_config =
169
169
  (uint8_t) AcclFilterMode::PERF | (uint8_t) AcclBandwidth::RES_AVG16 | (uint8_t) AccelOutputDataRate::HZ_25;
170
170
  ESP_LOGV(TAG, " Output accel_config: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(accel_config));
@@ -172,7 +172,7 @@ void BMI160Component::internal_setup_(int stage) {
172
172
  this->mark_failed();
173
173
  return;
174
174
  }
175
- ESP_LOGV(TAG, " Setting up Accel Range...");
175
+ ESP_LOGV(TAG, " Setting up Accel Range");
176
176
  uint8_t accel_range = (uint8_t) AccelRange::RANGE_16G;
177
177
  ESP_LOGV(TAG, " Output accel_range: 0b" BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(accel_range));
178
178
  if (!this->write_byte(BMI160_REGISTER_ACCEL_RANGE, accel_range)) {
@@ -189,7 +189,7 @@ void BMI160Component::dump_config() {
189
189
  ESP_LOGCONFIG(TAG, "BMI160:");
190
190
  LOG_I2C_DEVICE(this);
191
191
  if (this->is_failed()) {
192
- ESP_LOGE(TAG, "Communication with BMI160 failed!");
192
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
193
193
  }
194
194
  LOG_UPDATE_INTERVAL(this);
195
195
  LOG_SENSOR(" ", "Acceleration X", this->accel_x_sensor_);
@@ -219,7 +219,7 @@ void BMI160Component::update() {
219
219
  return;
220
220
  }
221
221
 
222
- ESP_LOGV(TAG, " Updating BMI160...");
222
+ ESP_LOGV(TAG, " Updating BMI160");
223
223
  int16_t data[6];
224
224
  if (this->read_le_int16_(BMI160_REGISTER_DATA_GYRO_X_LSB, data, 6) != i2c::ERROR_OK) {
225
225
  this->status_set_warning();
@@ -20,7 +20,7 @@ void BMP085Component::update() {
20
20
  this->set_timeout("temperature", 5, [this]() { this->read_temperature_(); });
21
21
  }
22
22
  void BMP085Component::setup() {
23
- ESP_LOGCONFIG(TAG, "Setting up BMP085...");
23
+ ESP_LOGCONFIG(TAG, "Running setup");
24
24
  uint8_t data[22];
25
25
  if (!this->read_bytes(BMP085_REGISTER_AC1_H, data, 22)) {
26
26
  this->mark_failed();
@@ -129,7 +129,7 @@ void BMP085Component::read_pressure_() {
129
129
  this->status_clear_warning();
130
130
  }
131
131
  bool BMP085Component::set_mode_(uint8_t mode) {
132
- ESP_LOGV(TAG, "Setting mode to 0x%02X...", mode);
132
+ ESP_LOGV(TAG, "Setting mode to 0x%02X", mode);
133
133
  return this->write_byte(BMP085_REGISTER_CONTROL, mode);
134
134
  }
135
135
  float BMP085Component::get_setup_priority() const { return setup_priority::DATA; }
@@ -57,7 +57,7 @@ static const char *iir_filter_to_str(BMP280IIRFilter filter) {
57
57
  }
58
58
 
59
59
  void BMP280Component::setup() {
60
- ESP_LOGCONFIG(TAG, "Setting up BMP280...");
60
+ ESP_LOGCONFIG(TAG, "Running setup");
61
61
  uint8_t chip_id = 0;
62
62
 
63
63
  // Read the chip id twice, to work around a bug where the first read is 0.
@@ -132,7 +132,7 @@ void BMP280Component::dump_config() {
132
132
  ESP_LOGCONFIG(TAG, "BMP280:");
133
133
  switch (this->error_code_) {
134
134
  case COMMUNICATION_FAILED:
135
- ESP_LOGE(TAG, "Communication with BMP280 failed!");
135
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
136
136
  break;
137
137
  case WRONG_CHIP_ID:
138
138
  ESP_LOGE(TAG, "BMP280 has wrong chip ID! Is it a BME280?");
@@ -155,7 +155,7 @@ inline uint8_t oversampling_to_time(BMP280Oversampling over_sampling) { return (
155
155
 
156
156
  void BMP280Component::update() {
157
157
  // Enable sensor
158
- ESP_LOGV(TAG, "Sending conversion request...");
158
+ ESP_LOGV(TAG, "Sending conversion request");
159
159
  uint8_t meas_value = 0;
160
160
  meas_value |= (this->temperature_oversampling_ & 0b111) << 5;
161
161
  meas_value |= (this->pressure_oversampling_ & 0b111) << 2;
@@ -70,10 +70,10 @@ static const LogString *iir_filter_to_str(IIRFilter filter) {
70
70
 
71
71
  void BMP3XXComponent::setup() {
72
72
  this->error_code_ = NONE;
73
- ESP_LOGCONFIG(TAG, "Setting up BMP3XX...");
73
+ ESP_LOGCONFIG(TAG, "Running setup");
74
74
  // Call the Device base class "initialise" function
75
75
  if (!reset()) {
76
- ESP_LOGE(TAG, "Failed to reset BMP3XX...");
76
+ ESP_LOGE(TAG, "Failed to reset");
77
77
  this->error_code_ = ERROR_SENSOR_RESET;
78
78
  this->mark_failed();
79
79
  }
@@ -148,25 +148,25 @@ void BMP3XXComponent::setup() {
148
148
  }
149
149
 
150
150
  void BMP3XXComponent::dump_config() {
151
- ESP_LOGCONFIG(TAG, "BMP3XX:");
152
- ESP_LOGCONFIG(TAG, " Type: %s (0x%X)", LOG_STR_ARG(chip_type_to_str(this->chip_id_.reg)), this->chip_id_.reg);
151
+ ESP_LOGCONFIG(TAG,
152
+ "BMP3XX:\n"
153
+ " Type: %s (0x%X)",
154
+ LOG_STR_ARG(chip_type_to_str(this->chip_id_.reg)), this->chip_id_.reg);
153
155
  switch (this->error_code_) {
154
156
  case NONE:
155
157
  break;
156
158
  case ERROR_COMMUNICATION_FAILED:
157
- ESP_LOGE(TAG, "Communication with BMP3XX failed!");
159
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
158
160
  break;
159
161
  case ERROR_WRONG_CHIP_ID:
160
- ESP_LOGE(
161
- TAG,
162
- "BMP3XX has wrong chip ID (reported id: 0x%X) - please check if you are really using a BMP 388 or BMP 390",
163
- this->chip_id_.reg);
162
+ ESP_LOGE(TAG, "Wrong chip ID (reported id: 0x%X) - please check if you are really using a BMP 388 or BMP 390",
163
+ this->chip_id_.reg);
164
164
  break;
165
165
  case ERROR_SENSOR_RESET:
166
- ESP_LOGE(TAG, "BMP3XX failed to reset");
166
+ ESP_LOGE(TAG, "Failed to reset");
167
167
  break;
168
168
  default:
169
- ESP_LOGE(TAG, "BMP3XX error code %d", (int) this->error_code_);
169
+ ESP_LOGE(TAG, "Error code %d", (int) this->error_code_);
170
170
  break;
171
171
  }
172
172
  ESP_LOGCONFIG(TAG, " IIR Filter: %s", LOG_STR_ARG(iir_filter_to_str(this->iir_filter_)));
@@ -186,7 +186,7 @@ inline uint8_t oversampling_to_time(Oversampling over_sampling) { return (1 << u
186
186
 
187
187
  void BMP3XXComponent::update() {
188
188
  // Enable sensor
189
- ESP_LOGV(TAG, "Sending conversion request...");
189
+ ESP_LOGV(TAG, "Sending conversion request");
190
190
  float meas_time = 1.0f;
191
191
  // Ref: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp390-ds002.pdf 3.9.2
192
192
  meas_time += 2.02f * oversampling_to_time(this->temperature_oversampling_) + 0.163f;
@@ -296,7 +296,7 @@ bool BMP3XXComponent::get_pressure(float &pressure) {
296
296
  bool BMP3XXComponent::get_measurements(float &temperature, float &pressure) {
297
297
  // Check if a measurement is ready
298
298
  if (!data_ready()) {
299
- ESP_LOGD(TAG, "BMP3XX Get measurement - data not ready skipping update");
299
+ ESP_LOGD(TAG, "Get measurement - data not ready skipping update");
300
300
  return false;
301
301
  }
302
302