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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (720) 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 +712 -358
  29. esphome/components/api/api_connection.h +343 -284
  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 +2 -0
  33. esphome/components/api/api_pb2.h +637 -1
  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 -2
  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 +4 -3
  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 +16 -14
  67. esphome/components/bme280_base/bme280_base.cpp +3 -3
  68. esphome/components/bme680/bme680.cpp +3 -3
  69. esphome/components/bme680/sensor.py +2 -2
  70. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  71. esphome/components/bme680_bsec/sensor.py +7 -3
  72. esphome/components/bme68x_bsec2/__init__.py +6 -5
  73. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  74. esphome/components/bme68x_bsec2/sensor.py +4 -4
  75. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  76. esphome/components/bmi160/bmi160.cpp +11 -11
  77. esphome/components/bmp085/bmp085.cpp +2 -2
  78. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  79. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  80. esphome/components/bmp581/bmp581.cpp +33 -27
  81. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  82. esphome/components/bp5758d/bp5758d.cpp +1 -1
  83. esphome/components/button/__init__.py +1 -0
  84. esphome/components/canbus/canbus.cpp +1 -1
  85. esphome/components/cap1188/cap1188.cpp +6 -4
  86. esphome/components/captive_portal/captive_portal.cpp +1 -1
  87. esphome/components/ccs811/ccs811.cpp +3 -2
  88. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  89. esphome/components/ch422g/ch422g.cpp +2 -2
  90. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  91. esphome/components/climate/__init__.py +1 -0
  92. esphome/components/climate/climate.cpp +12 -7
  93. esphome/components/climate/climate.h +1 -1
  94. esphome/components/climate_ir/climate_ir.cpp +7 -4
  95. esphome/components/cm1106/__init__.py +1 -0
  96. esphome/components/cm1106/cm1106.cpp +112 -0
  97. esphome/components/cm1106/cm1106.h +40 -0
  98. esphome/components/cm1106/sensor.py +72 -0
  99. esphome/components/const/__init__.py +1 -0
  100. esphome/components/cover/__init__.py +1 -0
  101. esphome/components/cs5460a/cs5460a.cpp +16 -11
  102. esphome/components/cse7761/cse7761.cpp +2 -2
  103. esphome/components/cse7766/cse7766.cpp +0 -5
  104. esphome/components/cse7766/cse7766.h +5 -1
  105. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  106. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  107. esphome/components/current_based/current_based_cover.cpp +4 -2
  108. esphome/components/dac7678/dac7678_output.cpp +4 -4
  109. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  110. esphome/components/daly_bms/daly_bms.cpp +2 -1
  111. esphome/components/dashboard_import/__init__.py +1 -2
  112. esphome/components/datetime/__init__.py +3 -1
  113. esphome/components/debug/debug_component.cpp +1 -5
  114. esphome/components/debug/debug_component.h +1 -1
  115. esphome/components/debug/debug_esp32.cpp +4 -2
  116. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  117. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  118. esphome/components/demo/__init__.py +206 -0
  119. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  120. esphome/components/demo/demo_button.h +15 -0
  121. esphome/components/demo/demo_date.h +34 -0
  122. esphome/components/demo/demo_datetime.h +40 -0
  123. esphome/components/demo/demo_lock.h +17 -0
  124. esphome/components/demo/demo_select.h +15 -0
  125. esphome/components/demo/demo_text.h +18 -0
  126. esphome/components/demo/demo_time.h +34 -0
  127. esphome/components/demo/demo_valve.h +54 -0
  128. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  129. esphome/components/dht/dht.cpp +29 -50
  130. esphome/components/dht12/dht12.cpp +2 -2
  131. esphome/components/display/display.h +5 -3
  132. esphome/components/dps310/dps310.cpp +7 -5
  133. esphome/components/ds1307/ds1307.cpp +2 -2
  134. esphome/components/dsmr/dsmr.cpp +5 -3
  135. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  136. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  137. esphome/components/ee895/ee895.cpp +3 -3
  138. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  139. esphome/components/emc2101/emc2101.cpp +11 -9
  140. esphome/components/ens160_base/ens160_base.cpp +2 -2
  141. esphome/components/ens210/ens210.cpp +2 -2
  142. esphome/components/es7210/es7210.cpp +6 -4
  143. esphome/components/es7243e/es7243e.cpp +1 -1
  144. esphome/components/es8156/es8156.cpp +1 -1
  145. esphome/components/es8311/es8311.cpp +8 -6
  146. esphome/components/es8388/__init__.py +0 -0
  147. esphome/components/es8388/audio_dac.py +26 -0
  148. esphome/components/es8388/es8388.cpp +289 -0
  149. esphome/components/es8388/es8388.h +81 -0
  150. esphome/components/es8388/es8388_const.h +83 -0
  151. esphome/components/es8388/select/__init__.py +47 -0
  152. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  153. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  154. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  155. esphome/components/es8388/select/dac_output_select.h +15 -0
  156. esphome/components/esp32/__init__.py +88 -20
  157. esphome/components/esp32/boards.py +208 -125
  158. esphome/components/esp32/const.py +6 -0
  159. esphome/components/esp32/gpio.py +14 -1
  160. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  161. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  162. esphome/components/esp32/preferences.cpp +7 -7
  163. esphome/components/esp32_ble/__init__.py +115 -0
  164. esphome/components/esp32_ble/ble.cpp +11 -9
  165. esphome/components/esp32_ble/ble_uuid.h +1 -1
  166. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  167. esphome/components/esp32_ble_server/__init__.py +4 -1
  168. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  169. esphome/components/esp32_ble_server/ble_server.h +0 -1
  170. esphome/components/esp32_ble_tracker/__init__.py +6 -2
  171. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +12 -9
  172. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  173. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  174. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  175. esphome/components/esp32_improv/__init__.py +5 -1
  176. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  177. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  178. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  179. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  180. esphome/components/esp8266/gpio.cpp +10 -1
  181. esphome/components/esp8266/preferences.cpp +6 -6
  182. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  183. esphome/components/esp_ldo/__init__.py +91 -0
  184. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  185. esphome/components/esp_ldo/esp_ldo.h +43 -0
  186. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  187. esphome/components/ethernet/ethernet_component.cpp +38 -26
  188. esphome/components/ethernet/ethernet_component.h +1 -1
  189. esphome/components/event/__init__.py +1 -0
  190. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  191. esphome/components/ezo/ezo.cpp +1 -1
  192. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  193. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  194. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  195. esphome/components/fan/__init__.py +1 -0
  196. esphome/components/fan/fan.cpp +4 -2
  197. esphome/components/fastled_base/fastled_light.cpp +7 -5
  198. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  199. esphome/components/fs3000/fs3000.cpp +1 -1
  200. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  201. esphome/components/ft63x6/ft63x6.cpp +5 -3
  202. esphome/components/gcja5/gcja5.cpp +0 -12
  203. esphome/components/gcja5/gcja5.h +8 -3
  204. esphome/components/gdk101/gdk101.cpp +2 -2
  205. esphome/components/globals/globals_component.h +13 -10
  206. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  207. esphome/components/gp8403/gp8403.cpp +4 -2
  208. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  209. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  210. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  211. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  212. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  213. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  214. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  215. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  216. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  217. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  218. esphome/components/haier/haier_base.cpp +2 -2
  219. esphome/components/haier/hon_climate.cpp +13 -6
  220. esphome/components/havells_solar/havells_solar.cpp +5 -2
  221. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  222. esphome/components/hdc1080/hdc1080.cpp +2 -2
  223. esphome/components/he60r/he60r.cpp +4 -2
  224. esphome/components/hlw8012/hlw8012.cpp +6 -4
  225. esphome/components/hm3301/hm3301.cpp +2 -2
  226. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  227. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  228. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  229. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  230. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  231. esphome/components/hte501/hte501.cpp +3 -2
  232. esphome/components/http_request/__init__.py +2 -2
  233. esphome/components/http_request/http_request.cpp +7 -5
  234. esphome/components/http_request/http_request_idf.cpp +4 -2
  235. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  236. esphome/components/htu21d/htu21d.cpp +2 -2
  237. esphome/components/htu31d/htu31d.cpp +2 -2
  238. esphome/components/hx711/hx711.cpp +2 -2
  239. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  240. esphome/components/hyt271/hyt271.cpp +2 -2
  241. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  242. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  243. esphome/components/i2s_audio/__init__.py +2 -0
  244. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  245. esphome/components/i2s_audio/i2s_audio.h +1 -1
  246. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  247. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  248. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +54 -64
  249. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +4 -0
  250. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +1 -1
  251. esphome/components/iaqcore/iaqcore.cpp +3 -3
  252. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  253. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  254. esphome/components/image/image.cpp +1 -0
  255. esphome/components/ina219/ina219.cpp +2 -2
  256. esphome/components/ina226/ina226.cpp +8 -5
  257. esphome/components/ina260/ina260.cpp +1 -1
  258. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  259. esphome/components/ina3221/ina3221.cpp +2 -2
  260. esphome/components/inkplate6/display.py +12 -2
  261. esphome/components/inkplate6/inkplate.cpp +13 -9
  262. esphome/components/inkplate6/inkplate.h +7 -6
  263. esphome/components/integration/integration_sensor.cpp +1 -1
  264. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  265. esphome/components/json/json_util.cpp +4 -5
  266. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  267. esphome/components/key_collector/key_collector.cpp +4 -2
  268. esphome/components/kmeteriso/kmeteriso.cpp +2 -1
  269. esphome/components/kuntze/kuntze.cpp +4 -2
  270. esphome/components/lc709203f/__init__.py +1 -0
  271. esphome/components/lc709203f/lc709203f.cpp +299 -0
  272. esphome/components/lc709203f/lc709203f.h +55 -0
  273. esphome/components/lc709203f/sensor.py +93 -0
  274. esphome/components/lcd_base/lcd_display.cpp +2 -2
  275. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  276. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  277. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  278. esphome/components/ld2410/ld2410.cpp +6 -7
  279. esphome/components/ld2420/ld2420.cpp +9 -7
  280. esphome/components/ld2450/ld2450.cpp +6 -4
  281. esphome/components/ld2450/sensor.py +2 -2
  282. esphome/components/ledc/ledc_output.cpp +32 -28
  283. esphome/components/libretiny/const.py +1 -1
  284. esphome/components/libretiny/preferences.cpp +6 -7
  285. esphome/components/light/__init__.py +2 -1
  286. esphome/components/light/esp_hsv_color.h +1 -1
  287. esphome/components/light/light_state.cpp +9 -5
  288. esphome/components/light/light_transformer.h +1 -1
  289. esphome/components/lightwaverf/LwTx.cpp +1 -1
  290. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  291. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  292. esphome/components/lock/__init__.py +1 -0
  293. esphome/components/lock/lock.h +1 -1
  294. esphome/components/logger/__init__.py +6 -0
  295. esphome/components/logger/logger.cpp +9 -5
  296. esphome/components/logger/logger.h +4 -4
  297. esphome/components/logger/logger_esp32.cpp +5 -5
  298. esphome/components/ltr390/ltr390.cpp +8 -5
  299. esphome/components/ltr501/ltr501.cpp +19 -14
  300. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  301. esphome/components/lvgl/__init__.py +2 -2
  302. esphome/components/lvgl/automation.py +5 -4
  303. esphome/components/lvgl/defines.py +0 -2
  304. esphome/components/lvgl/lv_validation.py +1 -3
  305. esphome/components/lvgl/lvcode.py +7 -8
  306. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  307. esphome/components/lvgl/schemas.py +22 -23
  308. esphome/components/lvgl/trigger.py +8 -3
  309. esphome/components/lvgl/widgets/__init__.py +2 -2
  310. esphome/components/lvgl/widgets/canvas.py +9 -3
  311. esphome/components/lvgl/widgets/line.py +2 -1
  312. esphome/components/lvgl/widgets/tabview.py +7 -0
  313. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  314. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  315. esphome/components/max17043/max17043.cpp +2 -2
  316. esphome/components/max31855/max31855.cpp +2 -1
  317. esphome/components/max31856/max31856.cpp +9 -11
  318. esphome/components/max31865/max31865.cpp +6 -4
  319. esphome/components/max44009/max44009.cpp +2 -2
  320. esphome/components/max6675/max6675.cpp +1 -1
  321. esphome/components/max6956/max6956.cpp +5 -3
  322. esphome/components/max7219/max7219.cpp +8 -6
  323. esphome/components/max7219digit/automation.h +52 -0
  324. esphome/components/max7219digit/display.py +93 -1
  325. esphome/components/max7219digit/max7219digit.cpp +16 -13
  326. esphome/components/max9611/max9611.cpp +9 -6
  327. esphome/components/mcp23008/mcp23008.cpp +1 -1
  328. esphome/components/mcp23016/mcp23016.cpp +1 -1
  329. esphome/components/mcp23017/mcp23017.cpp +1 -1
  330. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  331. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  332. esphome/components/mcp3008/mcp3008.cpp +1 -1
  333. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  334. esphome/components/mcp3204/mcp3204.cpp +1 -1
  335. esphome/components/mcp4461/mcp4461.cpp +2 -2
  336. esphome/components/mcp4725/mcp4725.cpp +2 -2
  337. esphome/components/mcp4728/mcp4728.cpp +2 -2
  338. esphome/components/mcp9600/mcp9600.cpp +1 -1
  339. esphome/components/mcp9808/mcp9808.cpp +4 -4
  340. esphome/components/mdns/mdns_component.cpp +8 -2
  341. esphome/components/mdns/mdns_component.h +3 -1
  342. esphome/components/mdns/mdns_esp32.cpp +2 -2
  343. esphome/components/media_player/__init__.py +1 -0
  344. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  345. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  346. esphome/components/micronova/micronova.h +2 -2
  347. esphome/components/mics_4514/mics_4514.cpp +2 -2
  348. esphome/components/midea/air_conditioner.cpp +7 -5
  349. esphome/components/midea_ir/midea_ir.cpp +1 -1
  350. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  351. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  352. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  353. esphome/components/mlx90614/mlx90614.cpp +4 -3
  354. esphome/components/mmc5603/mmc5603.cpp +2 -2
  355. esphome/components/mmc5983/mmc5983.cpp +1 -1
  356. esphome/components/modbus/modbus.cpp +7 -5
  357. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  358. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  359. esphome/components/modbus_controller/switch/__init__.py +6 -2
  360. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  361. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  362. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  363. esphome/components/mpr121/mpr121.cpp +2 -2
  364. esphome/components/mpu6050/mpu6050.cpp +6 -6
  365. esphome/components/mpu6886/mpu6886.cpp +6 -6
  366. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  367. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  368. esphome/components/mqtt/mqtt_client.cpp +31 -24
  369. esphome/components/mqtt/mqtt_component.cpp +2 -2
  370. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  371. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  372. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  373. esphome/components/ms5611/ms5611.cpp +2 -2
  374. esphome/components/ms8607/ms8607.cpp +2 -2
  375. esphome/components/msa3xx/msa3xx.cpp +16 -12
  376. esphome/components/my9231/my9231.cpp +7 -5
  377. esphome/components/nau7802/nau7802.cpp +6 -4
  378. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  379. esphome/components/network/ip_address.h +1 -1
  380. esphome/components/network/util.cpp +13 -0
  381. esphome/components/nextion/base_component.py +2 -0
  382. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +2 -3
  383. esphome/components/nextion/display.py +34 -22
  384. esphome/components/nextion/nextion.cpp +182 -143
  385. esphome/components/nextion/nextion.h +36 -0
  386. esphome/components/nextion/nextion_commands.cpp +3 -3
  387. esphome/components/nextion/nextion_upload_arduino.cpp +58 -61
  388. esphome/components/nextion/nextion_upload_idf.cpp +69 -72
  389. esphome/components/nextion/sensor/nextion_sensor.cpp +4 -4
  390. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  391. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +2 -2
  392. esphome/components/nfc/nci_message.h +1 -1
  393. esphome/components/nfc/ndef_record.h +1 -1
  394. esphome/components/nfc/ndef_record_text.h +1 -1
  395. esphome/components/nfc/ndef_record_uri.h +1 -1
  396. esphome/components/nfc/nfc.h +1 -1
  397. esphome/components/nfc/nfc_tag.h +1 -1
  398. esphome/components/noblex/noblex.cpp +1 -1
  399. esphome/components/npi19/npi19.cpp +5 -7
  400. esphome/components/number/__init__.py +11 -0
  401. esphome/components/online_image/__init__.py +13 -1
  402. esphome/components/online_image/online_image.cpp +26 -4
  403. esphome/components/online_image/online_image.h +21 -4
  404. esphome/components/opentherm/generate.py +3 -3
  405. esphome/components/opentherm/hub.cpp +11 -7
  406. esphome/components/opentherm/number/number.cpp +5 -3
  407. esphome/components/opentherm/opentherm.h +1 -1
  408. esphome/components/opentherm/schema.py +13 -13
  409. esphome/components/opentherm/validate.py +1 -1
  410. esphome/components/openthread/__init__.py +146 -0
  411. esphome/components/openthread/const.py +10 -0
  412. esphome/components/openthread/openthread.cpp +206 -0
  413. esphome/components/openthread/openthread.h +68 -0
  414. esphome/components/openthread/openthread_esp.cpp +164 -0
  415. esphome/components/openthread/tlv.py +58 -0
  416. esphome/components/openthread_info/__init__.py +0 -0
  417. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  418. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  419. esphome/components/openthread_info/text_sensor.py +105 -0
  420. esphome/components/output/float_output.cpp +1 -1
  421. esphome/components/output/switch/output_switch.cpp +1 -1
  422. esphome/components/packet_transport/packet_transport.cpp +6 -4
  423. esphome/components/pca6416a/pca6416a.cpp +2 -2
  424. esphome/components/pca9554/pca9554.cpp +6 -4
  425. esphome/components/pca9685/pca9685_output.cpp +12 -8
  426. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  427. esphome/components/pcf85063/pcf85063.cpp +2 -2
  428. esphome/components/pcf8563/pcf8563.cpp +2 -2
  429. esphome/components/pcf8574/pcf8574.cpp +2 -2
  430. esphome/components/pid/pid_climate.cpp +8 -5
  431. esphome/components/pid/pid_climate.h +1 -1
  432. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  433. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  434. esphome/components/pipsolar/pipsolar.cpp +3 -3
  435. esphome/components/pm1006/pm1006.cpp +3 -7
  436. esphome/components/pm1006/pm1006.h +4 -1
  437. esphome/components/pm2005/pm2005.cpp +12 -13
  438. esphome/components/pm2005/sensor.py +1 -1
  439. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  440. esphome/components/pmsx003/pmsx003.cpp +0 -4
  441. esphome/components/pmsx003/pmsx003.h +5 -2
  442. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  443. esphome/components/pmwcs3/pmwcs3.h +0 -1
  444. esphome/components/pn532/pn532.cpp +7 -7
  445. esphome/components/pn532/pn532.h +1 -1
  446. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  447. esphome/components/pn7150/pn7150.cpp +4 -4
  448. esphome/components/pn7160/pn7160.cpp +4 -4
  449. esphome/components/power_supply/power_supply.cpp +6 -4
  450. esphome/components/power_supply/power_supply.h +1 -1
  451. esphome/components/psram/__init__.py +59 -35
  452. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  453. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  454. esphome/components/pylontech/pylontech.cpp +2 -2
  455. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  456. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  457. esphome/components/pzemac/pzemac.cpp +4 -2
  458. esphome/components/pzemdc/pzemdc.cpp +4 -2
  459. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  460. esphome/components/qmp6988/qmp6988.cpp +2 -2
  461. esphome/components/qmp6988/qmp6988.h +1 -1
  462. esphome/components/qr_code/qr_code.cpp +5 -3
  463. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  464. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  465. esphome/components/rc522/rc522.cpp +5 -5
  466. esphome/components/rdm6300/rdm6300.cpp +1 -0
  467. esphome/components/remote_receiver/__init__.py +10 -2
  468. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  469. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  470. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  471. esphome/components/remote_transmitter/__init__.py +10 -2
  472. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  473. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  474. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  475. esphome/components/resistance/resistance_sensor.cpp +6 -3
  476. esphome/components/restart/button/restart_button.cpp +1 -1
  477. esphome/components/restart/switch/restart_switch.cpp +1 -1
  478. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  479. esphome/components/rp2040/__init__.py +7 -0
  480. esphome/components/rp2040/core.cpp +8 -1
  481. esphome/components/rp2040/gpio.cpp +26 -9
  482. esphome/components/rp2040/preferences.cpp +3 -3
  483. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  484. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  485. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  486. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  487. esphome/components/rtttl/rtttl.cpp +11 -9
  488. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  489. esphome/components/safe_mode/safe_mode.cpp +9 -8
  490. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  491. esphome/components/scd30/scd30.cpp +11 -8
  492. esphome/components/scd4x/scd4x.cpp +12 -8
  493. esphome/components/sdl/display.py +40 -0
  494. esphome/components/sdl/sdl_esphome.cpp +2 -2
  495. esphome/components/sdl/sdl_esphome.h +8 -0
  496. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  497. esphome/components/sdp3x/sdp3x.cpp +11 -11
  498. esphome/components/sds011/sds011.cpp +5 -6
  499. esphome/components/sds011/sds011.h +4 -1
  500. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  501. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  502. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  503. esphome/components/selec_meter/selec_meter.cpp +5 -2
  504. esphome/components/select/__init__.py +1 -0
  505. esphome/components/sen0321/sen0321.cpp +2 -2
  506. esphome/components/sen21231/sen21231.cpp +1 -1
  507. esphome/components/sen5x/sen5x.cpp +10 -7
  508. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  509. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  510. esphome/components/sensor/__init__.py +11 -1
  511. esphome/components/sensor/filter.h +1 -1
  512. esphome/components/sensor/sensor.h +9 -5
  513. esphome/components/servo/servo.cpp +12 -9
  514. esphome/components/servo/servo.h +1 -1
  515. esphome/components/sfa30/sfa30.cpp +1 -1
  516. esphome/components/sgp30/sgp30.cpp +10 -8
  517. esphome/components/sgp4x/sgp4x.cpp +49 -61
  518. esphome/components/sgp4x/sgp4x.h +0 -1
  519. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  520. esphome/components/sht3xd/sht3xd.cpp +1 -1
  521. esphome/components/sht4x/sht4x.cpp +2 -2
  522. esphome/components/shtcx/shtcx.cpp +13 -16
  523. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  524. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  525. esphome/components/sim800l/sim800l.cpp +2 -2
  526. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  527. esphome/components/sm16716/sm16716.cpp +1 -1
  528. esphome/components/sm2135/sm2135.cpp +1 -1
  529. esphome/components/sm2235/sm2235.cpp +5 -3
  530. esphome/components/sm2335/sm2335.cpp +5 -3
  531. esphome/components/sml/sml.cpp +1 -1
  532. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  533. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  534. esphome/components/sntp/sntp_component.cpp +1 -1
  535. esphome/components/socket/__init__.py +2 -0
  536. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  537. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  538. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  539. esphome/components/socket/socket.cpp +31 -0
  540. esphome/components/socket/socket.h +27 -1
  541. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  542. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  543. esphome/components/sound_level/sound_level.cpp +4 -2
  544. esphome/components/speaker/media_player/__init__.py +3 -0
  545. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  546. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  547. esphome/components/spi/__init__.py +10 -2
  548. esphome/components/spi/spi.cpp +4 -4
  549. esphome/components/spi_device/spi_device.cpp +1 -2
  550. esphome/components/sprinkler/sprinkler.cpp +9 -6
  551. esphome/components/sps30/sps30.cpp +16 -15
  552. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  553. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  554. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  555. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  556. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  557. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  558. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  559. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  560. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  561. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  562. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  563. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  564. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  565. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  566. esphome/components/st7567_base/st7567_base.cpp +3 -3
  567. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  568. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  569. esphome/components/st7701s/st7701s.cpp +4 -2
  570. esphome/components/st7735/st7735.cpp +3 -3
  571. esphome/components/st7789v/st7789v.cpp +10 -7
  572. esphome/components/st7920/st7920.cpp +6 -4
  573. esphome/components/statsd/statsd.cpp +9 -5
  574. esphome/components/status_led/light/status_led_light.cpp +1 -1
  575. esphome/components/status_led/status_led.cpp +1 -1
  576. esphome/components/stepper/stepper.h +5 -3
  577. esphome/components/sts3x/sts3x.cpp +2 -2
  578. esphome/components/switch/__init__.py +1 -0
  579. esphome/components/switch/switch.cpp +18 -12
  580. esphome/components/switch/switch.h +1 -1
  581. esphome/components/sx1509/__init__.py +53 -20
  582. esphome/components/sx1509/sx1509.cpp +29 -5
  583. esphome/components/sx1509/sx1509.h +9 -1
  584. esphome/components/t6615/t6615.cpp +1 -0
  585. esphome/components/tc74/tc74.cpp +1 -1
  586. esphome/components/tca9548a/tca9548a.cpp +1 -1
  587. esphome/components/tca9555/tca9555.cpp +2 -2
  588. esphome/components/tcs34725/tcs34725.cpp +4 -4
  589. esphome/components/tee501/tee501.cpp +3 -2
  590. esphome/components/tem3200/tem3200.cpp +5 -6
  591. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  592. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +38 -12
  593. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +3 -1
  594. esphome/components/template/cover/template_cover.cpp +1 -1
  595. esphome/components/template/select/template_select.cpp +6 -4
  596. esphome/components/template/text/template_text.cpp +2 -3
  597. esphome/components/template/valve/template_valve.cpp +5 -3
  598. esphome/components/text/__init__.py +10 -11
  599. esphome/components/text_sensor/__init__.py +1 -0
  600. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  601. esphome/components/time/__init__.py +1 -2
  602. esphome/components/time_based/time_based_cover.cpp +4 -2
  603. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  604. esphome/components/tm1621/tm1621.cpp +3 -3
  605. esphome/components/tm1637/tm1637.cpp +9 -7
  606. esphome/components/tm1638/tm1638.cpp +7 -5
  607. esphome/components/tm1651/tm1651.cpp +2 -2
  608. esphome/components/tmp102/tmp102.cpp +1 -3
  609. esphome/components/tmp102/tmp102.h +0 -3
  610. esphome/components/tmp1075/tmp1075.cpp +12 -9
  611. esphome/components/tmp117/tmp117.cpp +2 -2
  612. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  613. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  614. esphome/components/tsl2561/tsl2561.cpp +7 -5
  615. esphome/components/tsl2591/tsl2591.cpp +25 -27
  616. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  617. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  618. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  619. esphome/components/tuya/select/tuya_select.cpp +5 -3
  620. esphome/components/tx20/tx20.cpp +3 -3
  621. esphome/components/uart/__init__.py +4 -5
  622. esphome/components/uart/button/uart_button.cpp +1 -1
  623. esphome/components/uart/switch/uart_switch.cpp +2 -2
  624. esphome/components/uart/uart.cpp +2 -2
  625. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  626. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  627. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  628. esphome/components/uart/uart_component_host.cpp +11 -8
  629. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  630. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  631. esphome/components/udp/udp_component.cpp +9 -5
  632. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  633. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  634. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  635. esphome/components/update/__init__.py +1 -0
  636. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  637. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  638. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  639. esphome/components/usb_host/__init__.py +64 -0
  640. esphome/components/usb_host/usb_host.h +116 -0
  641. esphome/components/usb_host/usb_host_client.cpp +394 -0
  642. esphome/components/usb_host/usb_host_component.cpp +35 -0
  643. esphome/components/usb_uart/__init__.py +134 -0
  644. esphome/components/usb_uart/ch34x.cpp +80 -0
  645. esphome/components/usb_uart/cp210x.cpp +126 -0
  646. esphome/components/usb_uart/usb_uart.cpp +328 -0
  647. esphome/components/usb_uart/usb_uart.h +151 -0
  648. esphome/components/valve/__init__.py +1 -0
  649. esphome/components/veml3235/veml3235.cpp +13 -9
  650. esphome/components/veml7700/veml7700.cpp +10 -6
  651. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  652. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  653. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  654. esphome/components/web_server/server_index_v2.h +632 -630
  655. esphome/components/web_server/server_index_v3.h +411 -409
  656. esphome/components/web_server/web_server.cpp +5 -3
  657. esphome/components/web_server_base/web_server_base.cpp +1 -1
  658. esphome/components/web_server_idf/utils.cpp +1 -1
  659. esphome/components/web_server_idf/web_server_idf.cpp +1 -1
  660. esphome/components/weikai/__init__.py +2 -0
  661. esphome/components/weikai/weikai.cpp +23 -21
  662. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  663. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  664. esphome/components/wiegand/wiegand.cpp +1 -1
  665. esphome/components/wifi/wifi_component.cpp +50 -37
  666. esphome/components/wifi/wifi_component.h +7 -4
  667. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  668. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  669. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  670. esphome/components/wireguard/wireguard.cpp +21 -21
  671. esphome/components/wl_134/text_sensor.py +1 -2
  672. esphome/components/wled/wled_light_effect.cpp +1 -1
  673. esphome/components/x9c/x9c.cpp +5 -3
  674. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  675. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  676. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  677. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  678. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  679. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  680. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  681. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  682. esphome/components/xl9535/xl9535.cpp +2 -2
  683. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  684. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  685. esphome/config.py +3 -2
  686. esphome/config_validation.py +46 -17
  687. esphome/const.py +10 -1
  688. esphome/core/__init__.py +37 -18
  689. esphome/core/application.cpp +188 -5
  690. esphome/core/application.h +110 -0
  691. esphome/core/component.h +13 -0
  692. esphome/core/config.py +12 -0
  693. esphome/core/defines.h +10 -2
  694. esphome/core/hal.h +5 -0
  695. esphome/core/helpers.cpp +1 -1
  696. esphome/core/helpers.h +4 -4
  697. esphome/core/log.h +2 -0
  698. esphome/core/log_const_en.h +4 -0
  699. esphome/core/scheduler.cpp +2 -2
  700. esphome/coroutine.py +3 -4
  701. esphome/cpp_generator.py +32 -32
  702. esphome/dashboard/core.py +2 -2
  703. esphome/dashboard/web_server.py +2 -2
  704. esphome/git.py +4 -4
  705. esphome/helpers.py +5 -6
  706. esphome/loader.py +8 -7
  707. esphome/log.py +7 -1
  708. esphome/platformio_api.py +2 -3
  709. esphome/storage_json.py +13 -5
  710. esphome/types.py +12 -13
  711. esphome/util.py +1 -2
  712. esphome/writer.py +5 -3
  713. esphome/yaml_util.py +6 -1
  714. esphome/zeroconf.py +1 -1
  715. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/METADATA +12 -11
  716. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/RECORD +720 -667
  717. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/WHEEL +1 -1
  718. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/entry_points.txt +0 -0
  719. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/licenses/LICENSE +0 -0
  720. {esphome-2025.5.1.dist-info → esphome-2025.6.0b1.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,6 @@
1
1
  #include "seeed_mr24hpc1.h"
2
2
 
3
+ #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
5
6
  #include <utility>
@@ -61,7 +62,7 @@ void MR24HPC1Component::dump_config() {
61
62
 
62
63
  // Initialisation functions
63
64
  void MR24HPC1Component::setup() {
64
- ESP_LOGCONFIG(TAG, "Setting up MR24HPC1...");
65
+ ESP_LOGCONFIG(TAG, "Running setup");
65
66
  this->check_uart_settings(115200);
66
67
 
67
68
  if (this->custom_mode_number_ != nullptr) {
@@ -533,7 +534,7 @@ void MR24HPC1Component::r24_frame_parse_work_status_(uint8_t *data) {
533
534
  this->custom_mode_number_->publish_state(0);
534
535
  }
535
536
  if (this->custom_mode_end_text_sensor_ != nullptr) {
536
- this->custom_mode_end_text_sensor_->publish_state("Setup in progress...");
537
+ this->custom_mode_end_text_sensor_->publish_state("Setup in progress");
537
538
  }
538
539
  } else if (data[FRAME_COMMAND_WORD_INDEX] == 0x81) {
539
540
  ESP_LOGD(TAG, "Reply: get radar init status 0x%02X", data[FRAME_DATA_INDEX]);
@@ -1,4 +1,5 @@
1
1
  #include "seeed_mr60bha2.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  #include <cinttypes>
@@ -1,4 +1,5 @@
1
1
  #include "seeed_mr60fda2.h"
2
+ #include "esphome/core/helpers.h"
2
3
  #include "esphome/core/log.h"
3
4
 
4
5
  #include <cinttypes>
@@ -30,7 +31,7 @@ void MR60FDA2Component::dump_config() {
30
31
 
31
32
  // Initialisation functions
32
33
  void MR60FDA2Component::setup() {
33
- ESP_LOGCONFIG(TAG, "Setting up MR60FDA2...");
34
+ ESP_LOGCONFIG(TAG, "Running setup");
34
35
  this->check_uart_settings(115200);
35
36
 
36
37
  this->current_frame_locate_ = LOCATE_FRAME_HEADER;
@@ -335,7 +336,7 @@ void MR60FDA2Component::set_install_height(uint8_t index) {
335
336
 
336
337
  void MR60FDA2Component::set_height_threshold(uint8_t index) {
337
338
  uint8_t send_data[13] = {0x01, 0x00, 0x00, 0x00, 0x04, 0x0E, 0x08, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00};
338
- float_to_bytes(INSTALL_HEIGHT[index], &send_data[8]);
339
+ float_to_bytes(HEIGHT_THRESHOLD[index], &send_data[8]);
339
340
  send_data[12] = calculate_checksum(send_data + 8, 4);
340
341
  this->write_array(send_data, 13);
341
342
  ESP_LOGV(TAG, "SEND HEIGHT THRESHOLD: %s", format_hex_pretty(send_data, 13).c_str());
@@ -1,5 +1,6 @@
1
1
  #include "selec_meter.h"
2
2
  #include "selec_meter_registers.h"
3
+ #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
5
6
  namespace esphome {
@@ -83,8 +84,10 @@ void SelecMeter::on_modbus_data(const std::vector<uint8_t> &data) {
83
84
 
84
85
  void SelecMeter::update() { this->send(MODBUS_CMD_READ_IN_REGISTERS, 0, MODBUS_REGISTER_COUNT); }
85
86
  void SelecMeter::dump_config() {
86
- ESP_LOGCONFIG(TAG, "SELEC Meter:");
87
- ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_);
87
+ ESP_LOGCONFIG(TAG,
88
+ "SELEC Meter:\n"
89
+ " Address: 0x%02X",
90
+ this->address_);
88
91
  LOG_SENSOR(" ", "Total Active Energy", this->total_active_energy_sensor_);
89
92
  LOG_SENSOR(" ", "Import Active Energy", this->import_active_energy_sensor_);
90
93
  LOG_SENSOR(" ", "Export Active Energy", this->export_active_energy_sensor_);
@@ -111,6 +111,7 @@ async def register_select(var, config, *, options: list[str]):
111
111
  if not CORE.has_id(config[CONF_ID]):
112
112
  var = cg.Pvariable(config[CONF_ID], var)
113
113
  cg.add(cg.App.register_select(var))
114
+ CORE.register_platform_component("select", var)
114
115
  await setup_select_core_(var, config, options=options)
115
116
 
116
117
 
@@ -8,7 +8,7 @@ namespace sen0321_sensor {
8
8
  static const char *const TAG = "sen0321_sensor.sensor";
9
9
 
10
10
  void Sen0321Sensor::setup() {
11
- ESP_LOGCONFIG(TAG, "Setting up sen0321...");
11
+ ESP_LOGCONFIG(TAG, "Running setup");
12
12
  if (!this->write_byte(SENSOR_MODE_REGISTER, SENSOR_MODE_AUTO)) {
13
13
  ESP_LOGW(TAG, "Error setting measurement mode.");
14
14
  this->mark_failed();
@@ -21,7 +21,7 @@ void Sen0321Sensor::dump_config() {
21
21
  ESP_LOGCONFIG(TAG, "DF Robot Ozone Sensor sen0321:");
22
22
  LOG_I2C_DEVICE(this);
23
23
  if (this->is_failed()) {
24
- ESP_LOGE(TAG, "Communication with sen0321 failed!");
24
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
25
25
  }
26
26
  LOG_UPDATE_INTERVAL(this);
27
27
  }
@@ -12,7 +12,7 @@ void Sen21231Sensor::dump_config() {
12
12
  ESP_LOGCONFIG(TAG, "SEN21231:");
13
13
  LOG_I2C_DEVICE(this);
14
14
  if (this->is_failed()) {
15
- ESP_LOGE(TAG, "Communication with SEN21231 failed!");
15
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
16
16
  }
17
17
  ESP_LOGI(TAG, "SEN21231: %s", this->is_failed() ? "FAILED" : "OK");
18
18
  LOG_UPDATE_INTERVAL(this);
@@ -30,7 +30,7 @@ static const int8_t SEN5X_MIN_INDEX_VALUE = 1 * SEN5X_INDEX_SCALE_FACTOR; //
30
30
  static const int16_t SEN5X_MAX_INDEX_VALUE = 500 * SEN5X_INDEX_SCALE_FACTOR; // must be adjusted by the scale factor
31
31
 
32
32
  void SEN5XComponent::setup() {
33
- ESP_LOGCONFIG(TAG, "Setting up sen5x...");
33
+ ESP_LOGCONFIG(TAG, "Running setup");
34
34
 
35
35
  // the sensor needs 1000 ms to enter the idle state
36
36
  this->set_timeout(1000, [this]() {
@@ -245,10 +245,10 @@ void SEN5XComponent::dump_config() {
245
245
  if (this->is_failed()) {
246
246
  switch (this->error_code_) {
247
247
  case COMMUNICATION_FAILED:
248
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
248
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
249
249
  break;
250
250
  case MEASUREMENT_INIT_FAILED:
251
- ESP_LOGW(TAG, "Measurement Initialization failed!");
251
+ ESP_LOGW(TAG, "Measurement Initialization failed");
252
252
  break;
253
253
  case SERIAL_NUMBER_IDENTIFICATION_FAILED:
254
254
  ESP_LOGW(TAG, "Unable to read sensor serial id");
@@ -260,13 +260,16 @@ void SEN5XComponent::dump_config() {
260
260
  ESP_LOGW(TAG, "Unable to read sensor firmware version");
261
261
  break;
262
262
  default:
263
- ESP_LOGW(TAG, "Unknown setup error!");
263
+ ESP_LOGW(TAG, "Unknown setup error");
264
264
  break;
265
265
  }
266
266
  }
267
- ESP_LOGCONFIG(TAG, " Productname: %s", this->product_name_.c_str());
268
- ESP_LOGCONFIG(TAG, " Firmware version: %d", this->firmware_version_);
269
- ESP_LOGCONFIG(TAG, " Serial number %02d.%02d.%02d", serial_number_[0], serial_number_[1], serial_number_[2]);
267
+ ESP_LOGCONFIG(TAG,
268
+ " Productname: %s\n"
269
+ " Firmware version: %d\n"
270
+ " Serial number %02d.%02d.%02d",
271
+ this->product_name_.c_str(), this->firmware_version_, serial_number_[0], serial_number_[1],
272
+ serial_number_[2]);
270
273
  if (this->auto_cleaning_interval_.has_value()) {
271
274
  ESP_LOGCONFIG(TAG, " Auto cleaning interval %" PRId32 " seconds", auto_cleaning_interval_.value());
272
275
  }
@@ -1,6 +1,7 @@
1
1
  #include "i2c_sensirion.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
3
+ #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
4
5
  #include <cinttypes>
5
6
 
6
7
  namespace esphome {
@@ -1,5 +1,6 @@
1
1
  #pragma once
2
2
  #include "esphome/components/i2c/i2c.h"
3
+ #include "esphome/core/helpers.h"
3
4
 
4
5
  #include <vector>
5
6
 
@@ -43,8 +43,10 @@ from esphome.const import (
43
43
  CONF_WINDOW_SIZE,
44
44
  DEVICE_CLASS_APPARENT_POWER,
45
45
  DEVICE_CLASS_AQI,
46
+ DEVICE_CLASS_AREA,
46
47
  DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
47
48
  DEVICE_CLASS_BATTERY,
49
+ DEVICE_CLASS_BLOOD_GLUCOSE_CONCENTRATION,
48
50
  DEVICE_CLASS_CARBON_DIOXIDE,
49
51
  DEVICE_CLASS_CARBON_MONOXIDE,
50
52
  DEVICE_CLASS_CONDUCTIVITY,
@@ -56,6 +58,7 @@ from esphome.const import (
56
58
  DEVICE_CLASS_DURATION,
57
59
  DEVICE_CLASS_EMPTY,
58
60
  DEVICE_CLASS_ENERGY,
61
+ DEVICE_CLASS_ENERGY_DISTANCE,
59
62
  DEVICE_CLASS_ENERGY_STORAGE,
60
63
  DEVICE_CLASS_FREQUENCY,
61
64
  DEVICE_CLASS_GAS,
@@ -77,6 +80,7 @@ from esphome.const import (
77
80
  DEVICE_CLASS_PRECIPITATION,
78
81
  DEVICE_CLASS_PRECIPITATION_INTENSITY,
79
82
  DEVICE_CLASS_PRESSURE,
83
+ DEVICE_CLASS_REACTIVE_ENERGY,
80
84
  DEVICE_CLASS_REACTIVE_POWER,
81
85
  DEVICE_CLASS_SIGNAL_STRENGTH,
82
86
  DEVICE_CLASS_SOUND_PRESSURE,
@@ -92,6 +96,7 @@ from esphome.const import (
92
96
  DEVICE_CLASS_VOLUME_STORAGE,
93
97
  DEVICE_CLASS_WATER,
94
98
  DEVICE_CLASS_WEIGHT,
99
+ DEVICE_CLASS_WIND_DIRECTION,
95
100
  DEVICE_CLASS_WIND_SPEED,
96
101
  ENTITY_CATEGORY_CONFIG,
97
102
  )
@@ -104,8 +109,10 @@ CODEOWNERS = ["@esphome/core"]
104
109
  DEVICE_CLASSES = [
105
110
  DEVICE_CLASS_APPARENT_POWER,
106
111
  DEVICE_CLASS_AQI,
112
+ DEVICE_CLASS_AREA,
107
113
  DEVICE_CLASS_ATMOSPHERIC_PRESSURE,
108
114
  DEVICE_CLASS_BATTERY,
115
+ DEVICE_CLASS_BLOOD_GLUCOSE_CONCENTRATION,
109
116
  DEVICE_CLASS_CARBON_DIOXIDE,
110
117
  DEVICE_CLASS_CARBON_MONOXIDE,
111
118
  DEVICE_CLASS_CONDUCTIVITY,
@@ -117,6 +124,7 @@ DEVICE_CLASSES = [
117
124
  DEVICE_CLASS_DURATION,
118
125
  DEVICE_CLASS_EMPTY,
119
126
  DEVICE_CLASS_ENERGY,
127
+ DEVICE_CLASS_ENERGY_DISTANCE,
120
128
  DEVICE_CLASS_ENERGY_STORAGE,
121
129
  DEVICE_CLASS_FREQUENCY,
122
130
  DEVICE_CLASS_GAS,
@@ -138,6 +146,7 @@ DEVICE_CLASSES = [
138
146
  DEVICE_CLASS_PRECIPITATION,
139
147
  DEVICE_CLASS_PRECIPITATION_INTENSITY,
140
148
  DEVICE_CLASS_PRESSURE,
149
+ DEVICE_CLASS_REACTIVE_ENERGY,
141
150
  DEVICE_CLASS_REACTIVE_POWER,
142
151
  DEVICE_CLASS_SIGNAL_STRENGTH,
143
152
  DEVICE_CLASS_SOUND_PRESSURE,
@@ -153,11 +162,11 @@ DEVICE_CLASSES = [
153
162
  DEVICE_CLASS_VOLUME_STORAGE,
154
163
  DEVICE_CLASS_WATER,
155
164
  DEVICE_CLASS_WEIGHT,
165
+ DEVICE_CLASS_WIND_DIRECTION,
156
166
  DEVICE_CLASS_WIND_SPEED,
157
167
  ]
158
168
 
159
169
  _LOGGER = logging.getLogger(__name__)
160
-
161
170
  sensor_ns = cg.esphome_ns.namespace("sensor")
162
171
  StateClasses = sensor_ns.enum("StateClass")
163
172
  STATE_CLASSES = {
@@ -830,6 +839,7 @@ async def register_sensor(var, config):
830
839
  if not CORE.has_id(config[CONF_ID]):
831
840
  var = cg.Pvariable(config[CONF_ID], var)
832
841
  cg.add(cg.App.register_sensor(var))
842
+ CORE.register_platform_component("sensor", var)
833
843
  await setup_sensor_core_(var, config)
834
844
 
835
845
 
@@ -3,9 +3,9 @@
3
3
  #include <queue>
4
4
  #include <utility>
5
5
  #include <vector>
6
+ #include "esphome/core/automation.h"
6
7
  #include "esphome/core/component.h"
7
8
  #include "esphome/core/helpers.h"
8
- #include "esphome/core/automation.h"
9
9
 
10
10
  namespace esphome {
11
11
  namespace sensor {
@@ -1,9 +1,9 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/component.h"
5
4
  #include "esphome/core/entity_base.h"
6
5
  #include "esphome/core/helpers.h"
6
+ #include "esphome/core/log.h"
7
7
  #include "esphome/components/sensor/filter.h"
8
8
 
9
9
  #include <vector>
@@ -13,13 +13,17 @@ namespace sensor {
13
13
 
14
14
  #define LOG_SENSOR(prefix, type, obj) \
15
15
  if ((obj) != nullptr) { \
16
- ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \
16
+ ESP_LOGCONFIG(TAG, \
17
+ "%s%s '%s'\n" \
18
+ "%s State Class: '%s'\n" \
19
+ "%s Unit of Measurement: '%s'\n" \
20
+ "%s Accuracy Decimals: %d", \
21
+ prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str(), prefix, \
22
+ state_class_to_string((obj)->get_state_class()).c_str(), prefix, \
23
+ (obj)->get_unit_of_measurement().c_str(), prefix, (obj)->get_accuracy_decimals()); \
17
24
  if (!(obj)->get_device_class().empty()) { \
18
25
  ESP_LOGCONFIG(TAG, "%s Device Class: '%s'", prefix, (obj)->get_device_class().c_str()); \
19
26
  } \
20
- ESP_LOGCONFIG(TAG, "%s State Class: '%s'", prefix, state_class_to_string((obj)->get_state_class()).c_str()); \
21
- ESP_LOGCONFIG(TAG, "%s Unit of Measurement: '%s'", prefix, (obj)->get_unit_of_measurement().c_str()); \
22
- ESP_LOGCONFIG(TAG, "%s Accuracy Decimals: %d", prefix, (obj)->get_accuracy_decimals()); \
23
27
  if (!(obj)->get_icon().empty()) { \
24
28
  ESP_LOGCONFIG(TAG, "%s Icon: '%s'", prefix, (obj)->get_icon().c_str()); \
25
29
  } \
@@ -11,12 +11,15 @@ static const char *const TAG = "servo";
11
11
  uint32_t global_servo_id = 1911044085ULL; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
12
12
 
13
13
  void Servo::dump_config() {
14
- ESP_LOGCONFIG(TAG, "Servo:");
15
- ESP_LOGCONFIG(TAG, " Idle Level: %.1f%%", this->idle_level_ * 100.0f);
16
- ESP_LOGCONFIG(TAG, " Min Level: %.1f%%", this->min_level_ * 100.0f);
17
- ESP_LOGCONFIG(TAG, " Max Level: %.1f%%", this->max_level_ * 100.0f);
18
- ESP_LOGCONFIG(TAG, " auto detach time: %" PRIu32 " ms", this->auto_detach_time_);
19
- ESP_LOGCONFIG(TAG, " run duration: %" PRIu32 " ms", this->transition_length_);
14
+ ESP_LOGCONFIG(TAG,
15
+ "Servo:\n"
16
+ " Idle Level: %.1f%%\n"
17
+ " Min Level: %.1f%%\n"
18
+ " Max Level: %.1f%%\n"
19
+ " Auto-detach time: %" PRIu32 " ms\n"
20
+ " Run duration: %" PRIu32 " ms",
21
+ this->idle_level_ * 100.0f, this->min_level_ * 100.0f, this->max_level_ * 100.0f,
22
+ this->auto_detach_time_, this->transition_length_);
20
23
  }
21
24
 
22
25
  void Servo::setup() {
@@ -41,7 +44,7 @@ void Servo::loop() {
41
44
  if (millis() - this->start_millis_ > this->auto_detach_time_) {
42
45
  this->detach();
43
46
  this->start_millis_ = 0;
44
- ESP_LOGD(TAG, "Servo detached on auto_detach_time");
47
+ ESP_LOGD(TAG, "Detached on auto_detach_time");
45
48
  }
46
49
  }
47
50
  if (this->target_value_ != this->current_value_ && this->state_ == STATE_ATTACHED) {
@@ -63,7 +66,7 @@ void Servo::loop() {
63
66
  if (this->target_value_ == this->current_value_ && this->state_ == STATE_ATTACHED) {
64
67
  this->state_ = STATE_TARGET_REACHED;
65
68
  this->start_millis_ = millis(); // set current stamp for potential auto_detach_time_ check
66
- ESP_LOGD(TAG, "Servo reached target");
69
+ ESP_LOGD(TAG, "Reached target");
67
70
  }
68
71
  }
69
72
 
@@ -78,7 +81,7 @@ void Servo::write(float value) {
78
81
  this->source_value_ = this->current_value_;
79
82
  this->state_ = STATE_ATTACHED;
80
83
  this->start_millis_ = millis();
81
- ESP_LOGD(TAG, "Servo new target: %f", value);
84
+ ESP_LOGD(TAG, "New target: %f", value);
82
85
  }
83
86
 
84
87
  void Servo::internal_write(float value) {
@@ -1,7 +1,7 @@
1
1
  #pragma once
2
2
 
3
- #include "esphome/core/component.h"
4
3
  #include "esphome/core/automation.h"
4
+ #include "esphome/core/component.h"
5
5
  #include "esphome/core/helpers.h"
6
6
  #include "esphome/core/preferences.h"
7
7
  #include "esphome/components/output/float_output.h"
@@ -11,7 +11,7 @@ static const uint16_t SFA30_CMD_START_CONTINUOUS_MEASUREMENTS = 0x0006;
11
11
  static const uint16_t SFA30_CMD_READ_MEASUREMENT = 0x0327;
12
12
 
13
13
  void SFA30Component::setup() {
14
- ESP_LOGCONFIG(TAG, "Setting up sfa30...");
14
+ ESP_LOGCONFIG(TAG, "Running setup");
15
15
 
16
16
  // Serial Number identification
17
17
  uint16_t raw_device_marking[16];
@@ -33,7 +33,7 @@ const uint32_t SHORTEST_BASELINE_STORE_INTERVAL = 3600;
33
33
  const uint32_t MAXIMUM_STORAGE_DIFF = 50;
34
34
 
35
35
  void SGP30Component::setup() {
36
- ESP_LOGCONFIG(TAG, "Setting up SGP30...");
36
+ ESP_LOGCONFIG(TAG, "Running setup");
37
37
 
38
38
  // Serial Number identification
39
39
  uint16_t raw_serial_number[3];
@@ -232,27 +232,29 @@ void SGP30Component::dump_config() {
232
232
  if (this->is_failed()) {
233
233
  switch (this->error_code_) {
234
234
  case COMMUNICATION_FAILED:
235
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
235
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
236
236
  break;
237
237
  case MEASUREMENT_INIT_FAILED:
238
- ESP_LOGW(TAG, "Measurement Initialization failed!");
238
+ ESP_LOGW(TAG, "Measurement Initialization failed");
239
239
  break;
240
240
  case INVALID_ID:
241
241
  ESP_LOGW(TAG, "Sensor reported an invalid ID. Is this an SGP30?");
242
242
  break;
243
243
  case UNSUPPORTED_ID:
244
- ESP_LOGW(TAG, "Sensor reported an unsupported ID (SGPC3).");
244
+ ESP_LOGW(TAG, "Sensor reported an unsupported ID (SGPC3)");
245
245
  break;
246
246
  default:
247
- ESP_LOGW(TAG, "Unknown setup error!");
247
+ ESP_LOGW(TAG, "Unknown setup error");
248
248
  break;
249
249
  }
250
250
  } else {
251
251
  ESP_LOGCONFIG(TAG, " Serial number: %" PRIu64, this->serial_number_);
252
252
  if (this->eco2_baseline_ != 0x0000 && this->tvoc_baseline_ != 0x0000) {
253
- ESP_LOGCONFIG(TAG, " Baseline:");
254
- ESP_LOGCONFIG(TAG, " eCO2 Baseline: 0x%04X", this->eco2_baseline_);
255
- ESP_LOGCONFIG(TAG, " TVOC Baseline: 0x%04X", this->tvoc_baseline_);
253
+ ESP_LOGCONFIG(TAG,
254
+ " Baseline:\n"
255
+ " eCO2 Baseline: 0x%04X\n"
256
+ " TVOC Baseline: 0x%04X",
257
+ this->eco2_baseline_, this->tvoc_baseline_);
256
258
  } else {
257
259
  ESP_LOGCONFIG(TAG, " Baseline: No baseline configured");
258
260
  }
@@ -9,34 +9,34 @@ namespace sgp4x {
9
9
  static const char *const TAG = "sgp4x";
10
10
 
11
11
  void SGP4xComponent::setup() {
12
- ESP_LOGCONFIG(TAG, "Setting up SGP4x...");
12
+ ESP_LOGCONFIG(TAG, "Running setup");
13
13
 
14
14
  // Serial Number identification
15
15
  uint16_t raw_serial_number[3];
16
16
  if (!this->get_register(SGP4X_CMD_GET_SERIAL_ID, raw_serial_number, 3, 1)) {
17
- ESP_LOGE(TAG, "Failed to read serial number");
17
+ ESP_LOGE(TAG, "Get serial number failed");
18
18
  this->error_code_ = SERIAL_NUMBER_IDENTIFICATION_FAILED;
19
19
  this->mark_failed();
20
20
  return;
21
21
  }
22
22
  this->serial_number_ = (uint64_t(raw_serial_number[0]) << 24) | (uint64_t(raw_serial_number[1]) << 16) |
23
23
  (uint64_t(raw_serial_number[2]));
24
- ESP_LOGD(TAG, "Serial Number: %" PRIu64, this->serial_number_);
24
+ ESP_LOGD(TAG, "Serial number: %" PRIu64, this->serial_number_);
25
25
 
26
26
  // Featureset identification for future use
27
- uint16_t raw_featureset;
28
- if (!this->get_register(SGP4X_CMD_GET_FEATURESET, raw_featureset, 1)) {
29
- ESP_LOGD(TAG, "raw_featureset write_command_ failed");
27
+ uint16_t featureset;
28
+ if (!this->get_register(SGP4X_CMD_GET_FEATURESET, featureset, 1)) {
29
+ ESP_LOGD(TAG, "Get feature set failed");
30
30
  this->mark_failed();
31
31
  return;
32
32
  }
33
- this->featureset_ = raw_featureset;
34
- if ((this->featureset_ & 0x1FF) == SGP40_FEATURESET) {
35
- sgp_type_ = SGP40;
36
- self_test_time_ = SPG40_SELFTEST_TIME;
37
- measure_time_ = SGP40_MEASURE_TIME;
33
+ featureset &= 0x1FF;
34
+ if (featureset == SGP40_FEATURESET) {
35
+ this->sgp_type_ = SGP40;
36
+ this->self_test_time_ = SPG40_SELFTEST_TIME;
37
+ this->measure_time_ = SGP40_MEASURE_TIME;
38
38
  if (this->nox_sensor_) {
39
- ESP_LOGE(TAG, "Measuring NOx requires a SGP41 sensor but a SGP40 sensor is detected");
39
+ ESP_LOGE(TAG, "SGP41 required for NOx");
40
40
  // disable the sensor
41
41
  this->nox_sensor_->set_disabled_by_default(true);
42
42
  // make sure it's not visible in HA
@@ -45,20 +45,17 @@ void SGP4xComponent::setup() {
45
45
  // remove pointer to sensor
46
46
  this->nox_sensor_ = nullptr;
47
47
  }
48
+ } else if (featureset == SGP41_FEATURESET) {
49
+ this->sgp_type_ = SGP41;
50
+ this->self_test_time_ = SPG41_SELFTEST_TIME;
51
+ this->measure_time_ = SGP41_MEASURE_TIME;
48
52
  } else {
49
- if ((this->featureset_ & 0x1FF) == SGP41_FEATURESET) {
50
- sgp_type_ = SGP41;
51
- self_test_time_ = SPG41_SELFTEST_TIME;
52
- measure_time_ = SGP41_MEASURE_TIME;
53
- } else {
54
- ESP_LOGD(TAG, "Product feature set failed 0x%0X , expecting 0x%0X", uint16_t(this->featureset_ & 0x1FF),
55
- SGP40_FEATURESET);
56
- this->mark_failed();
57
- return;
58
- }
53
+ ESP_LOGD(TAG, "Unknown feature set 0x%0X", featureset);
54
+ this->mark_failed();
55
+ return;
59
56
  }
60
57
 
61
- ESP_LOGD(TAG, "Product version: 0x%0X", uint16_t(this->featureset_ & 0x1FF));
58
+ ESP_LOGD(TAG, "Version 0x%0X", featureset);
62
59
 
63
60
  if (this->store_baseline_) {
64
61
  // Hash with compilation time and serial number
@@ -70,7 +67,7 @@ void SGP4xComponent::setup() {
70
67
  if (this->pref_.load(&this->voc_baselines_storage_)) {
71
68
  this->voc_state0_ = this->voc_baselines_storage_.state0;
72
69
  this->voc_state1_ = this->voc_baselines_storage_.state1;
73
- ESP_LOGI(TAG, "Loaded VOC baseline state0: 0x%04" PRIX32 ", state1: 0x%04" PRIX32,
70
+ ESP_LOGV(TAG, "Loaded VOC baseline state0: 0x%04" PRIX32 ", state1: 0x%04" PRIX32,
74
71
  this->voc_baselines_storage_.state0, voc_baselines_storage_.state1);
75
72
  }
76
73
 
@@ -78,7 +75,7 @@ void SGP4xComponent::setup() {
78
75
  this->seconds_since_last_store_ = 0;
79
76
 
80
77
  if (this->voc_baselines_storage_.state0 > 0 && this->voc_baselines_storage_.state1 > 0) {
81
- ESP_LOGI(TAG, "Setting VOC baseline from save state0: 0x%04" PRIX32 ", state1: 0x%04" PRIX32,
78
+ ESP_LOGV(TAG, "Setting VOC baseline from save state0: 0x%04" PRIX32 ", state1: 0x%04" PRIX32,
82
79
  this->voc_baselines_storage_.state0, voc_baselines_storage_.state1);
83
80
  voc_algorithm_.set_states(this->voc_baselines_storage_.state0, this->voc_baselines_storage_.state1);
84
81
  }
@@ -110,39 +107,29 @@ void SGP4xComponent::setup() {
110
107
  limit the amount of communication done over wifi for power consumption or to keep the
111
108
  number of records reported from being overwhelming.
112
109
  */
113
- ESP_LOGD(TAG, "Component requires sampling of 1Hz, setting up background sampler");
110
+ ESP_LOGV(TAG, "Component requires sampling of 1Hz, setting up background sampler");
114
111
  this->set_interval(1000, [this]() { this->take_sample(); });
115
112
  }
116
113
 
117
114
  void SGP4xComponent::self_test_() {
118
- ESP_LOGD(TAG, "Self-test started");
115
+ ESP_LOGD(TAG, "Starting self-test");
119
116
  if (!this->write_command(SGP4X_CMD_SELF_TEST)) {
120
117
  this->error_code_ = COMMUNICATION_FAILED;
121
- ESP_LOGD(TAG, "Self-test communication failed");
118
+ ESP_LOGD(TAG, ESP_LOG_MSG_COMM_FAIL);
122
119
  this->mark_failed();
123
120
  }
124
121
 
125
- this->set_timeout(self_test_time_, [this]() {
126
- uint16_t reply;
127
- if (!this->read_data(reply)) {
122
+ this->set_timeout(this->self_test_time_, [this]() {
123
+ uint16_t reply = 0;
124
+ if (!this->read_data(reply) || (reply != 0xD400)) {
128
125
  this->error_code_ = SELF_TEST_FAILED;
129
- ESP_LOGD(TAG, "Self-test read_data_ failed");
126
+ ESP_LOGW(TAG, "Self-test failed (0x%X)", reply);
130
127
  this->mark_failed();
131
128
  return;
132
129
  }
133
130
 
134
- if (reply == 0xD400) {
135
- this->self_test_complete_ = true;
136
- ESP_LOGD(TAG, "Self-test completed");
137
- return;
138
- } else {
139
- this->error_code_ = SELF_TEST_FAILED;
140
- ESP_LOGD(TAG, "Self-test failed 0x%X", reply);
141
- return;
142
- }
143
-
144
- ESP_LOGD(TAG, "Self-test failed 0x%X", reply);
145
- this->mark_failed();
131
+ this->self_test_complete_ = true;
132
+ ESP_LOGD(TAG, "Self-test complete");
146
133
  });
147
134
  }
148
135
 
@@ -150,7 +137,7 @@ void SGP4xComponent::update_gas_indices_() {
150
137
  this->voc_index_ = this->voc_algorithm_.process(this->voc_sraw_);
151
138
  if (this->nox_sensor_ != nullptr)
152
139
  this->nox_index_ = this->nox_algorithm_.process(this->nox_sraw_);
153
- ESP_LOGV(TAG, "VOC = %" PRId32 ", NOx = %" PRId32, this->voc_index_, this->nox_index_);
140
+ ESP_LOGV(TAG, "VOC: %" PRId32 ", NOx: %" PRId32, this->voc_index_, this->nox_index_);
154
141
  // Store baselines after defined interval or if the difference between current and stored baseline becomes too
155
142
  // much
156
143
  if (this->store_baseline_ && this->seconds_since_last_store_ > SHORTEST_BASELINE_STORE_INTERVAL) {
@@ -162,18 +149,18 @@ void SGP4xComponent::update_gas_indices_() {
162
149
  this->voc_baselines_storage_.state1 = this->voc_state1_;
163
150
 
164
151
  if (this->pref_.save(&this->voc_baselines_storage_)) {
165
- ESP_LOGI(TAG, "Stored VOC baseline state0: 0x%04" PRIX32 " ,state1: 0x%04" PRIX32,
152
+ ESP_LOGV(TAG, "Stored VOC baseline state0: 0x%04" PRIX32 ", state1: 0x%04" PRIX32,
166
153
  this->voc_baselines_storage_.state0, this->voc_baselines_storage_.state1);
167
154
  } else {
168
- ESP_LOGW(TAG, "Could not store VOC baselines");
155
+ ESP_LOGW(TAG, "Storing VOC baselines failed");
169
156
  }
170
157
  }
171
158
  }
172
159
 
173
160
  if (this->samples_read_ < this->samples_to_stabilize_) {
174
161
  this->samples_read_++;
175
- ESP_LOGD(TAG, "Sensor has not collected enough samples yet. (%d/%d) VOC index is: %" PRIu32, this->samples_read_,
176
- this->samples_to_stabilize_, this->voc_index_);
162
+ ESP_LOGD(TAG, "Stabilizing (%d/%d); VOC index: %" PRIu32, this->samples_read_, this->samples_to_stabilize_,
163
+ this->voc_index_);
177
164
  }
178
165
  }
179
166
 
@@ -182,7 +169,7 @@ void SGP4xComponent::measure_raw_() {
182
169
  static uint32_t nox_conditioning_start = millis();
183
170
 
184
171
  if (!this->self_test_complete_) {
185
- ESP_LOGD(TAG, "Self-test not yet complete");
172
+ ESP_LOGW(TAG, "Self-test incomplete");
186
173
  return;
187
174
  }
188
175
  if (this->humidity_sensor_ != nullptr) {
@@ -270,37 +257,38 @@ void SGP4xComponent::update() {
270
257
  void SGP4xComponent::dump_config() {
271
258
  ESP_LOGCONFIG(TAG, "SGP4x:");
272
259
  LOG_I2C_DEVICE(this);
273
- ESP_LOGCONFIG(TAG, " store_baseline: %d", this->store_baseline_);
260
+ ESP_LOGCONFIG(TAG, " Store baseline: %s", YESNO(this->store_baseline_));
274
261
 
275
262
  if (this->is_failed()) {
276
263
  switch (this->error_code_) {
277
264
  case COMMUNICATION_FAILED:
278
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
265
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
279
266
  break;
280
267
  case SERIAL_NUMBER_IDENTIFICATION_FAILED:
281
- ESP_LOGW(TAG, "Get Serial number failed.");
268
+ ESP_LOGW(TAG, "Get serial number failed");
282
269
  break;
283
270
  case SELF_TEST_FAILED:
284
- ESP_LOGW(TAG, "Self test failed.");
271
+ ESP_LOGW(TAG, "Self-test failed");
285
272
  break;
286
-
287
273
  default:
288
- ESP_LOGW(TAG, "Unknown setup error!");
274
+ ESP_LOGW(TAG, "Unknown error");
289
275
  break;
290
276
  }
291
277
  } else {
292
- ESP_LOGCONFIG(TAG, " Type: %s", sgp_type_ == SGP41 ? "SGP41" : "SPG40");
293
- ESP_LOGCONFIG(TAG, " Serial number: %" PRIu64, this->serial_number_);
294
- ESP_LOGCONFIG(TAG, " Minimum Samples: %f", GasIndexAlgorithm_INITIAL_BLACKOUT);
278
+ ESP_LOGCONFIG(TAG,
279
+ " Type: %s\n"
280
+ " Serial number: %" PRIu64 "\n"
281
+ " Minimum Samples: %f",
282
+ sgp_type_ == SGP41 ? "SGP41" : "SPG40", this->serial_number_, GasIndexAlgorithm_INITIAL_BLACKOUT);
295
283
  }
296
284
  LOG_UPDATE_INTERVAL(this);
297
285
 
286
+ ESP_LOGCONFIG(TAG, " Compensation:");
298
287
  if (this->humidity_sensor_ != nullptr || this->temperature_sensor_ != nullptr) {
299
- ESP_LOGCONFIG(TAG, " Compensation:");
300
288
  LOG_SENSOR(" ", "Temperature Source:", this->temperature_sensor_);
301
289
  LOG_SENSOR(" ", "Humidity Source:", this->humidity_sensor_);
302
290
  } else {
303
- ESP_LOGCONFIG(TAG, " Compensation: No source configured");
291
+ ESP_LOGCONFIG(TAG, " No source configured");
304
292
  }
305
293
  LOG_SENSOR(" ", "VOC", this->voc_sensor_);
306
294
  LOG_SENSOR(" ", "NOx", this->nox_sensor_);
@@ -115,7 +115,6 @@ class SGP4xComponent : public PollingComponent, public sensor::Sensor, public se
115
115
 
116
116
  SgpType sgp_type_{SGP40};
117
117
  uint64_t serial_number_;
118
- uint16_t featureset_;
119
118
 
120
119
  bool self_test_complete_;
121
120
  uint16_t self_test_time_;