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,7 +1,7 @@
1
1
  #include "ltr_als_ps.h"
2
2
  #include "esphome/core/application.h"
3
- #include "esphome/core/log.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  using esphome::i2c::ErrorCode;
7
7
 
@@ -63,7 +63,7 @@ static float get_ps_gain_coeff(PsGain gain) {
63
63
  }
64
64
 
65
65
  void LTRAlsPsComponent::setup() {
66
- ESP_LOGCONFIG(TAG, "Setting up LTR-303/329/55x/659");
66
+ ESP_LOGCONFIG(TAG, "Running setup");
67
67
  // As per datasheet we need to wait at least 100ms after power on to get ALS chip responsive
68
68
  this->set_timeout(100, [this]() { this->state_ = State::DELAYED_SETUP; });
69
69
  }
@@ -85,27 +85,34 @@ void LTRAlsPsComponent::dump_config() {
85
85
  LOG_I2C_DEVICE(this);
86
86
  ESP_LOGCONFIG(TAG, " Device type: %s", get_device_type(this->ltr_type_));
87
87
  if (this->is_als_()) {
88
- ESP_LOGCONFIG(TAG, " Automatic mode: %s", ONOFF(this->automatic_mode_enabled_));
89
- ESP_LOGCONFIG(TAG, " Gain: %.0fx", get_gain_coeff(this->gain_));
90
- ESP_LOGCONFIG(TAG, " Integration time: %d ms", get_itime_ms(this->integration_time_));
91
- ESP_LOGCONFIG(TAG, " Measurement repeat rate: %d ms", get_meas_time_ms(this->repeat_rate_));
92
- ESP_LOGCONFIG(TAG, " Glass attenuation factor: %f", this->glass_attenuation_factor_);
88
+ ESP_LOGCONFIG(TAG,
89
+ " Automatic mode: %s\n"
90
+ " Gain: %.0fx\n"
91
+ " Integration time: %d ms\n"
92
+ " Measurement repeat rate: %d ms\n"
93
+ " Glass attenuation factor: %f",
94
+ ONOFF(this->automatic_mode_enabled_), get_gain_coeff(this->gain_),
95
+ get_itime_ms(this->integration_time_), get_meas_time_ms(this->repeat_rate_),
96
+ this->glass_attenuation_factor_);
93
97
  LOG_SENSOR(" ", "ALS calculated lux", this->ambient_light_sensor_);
94
98
  LOG_SENSOR(" ", "CH1 Infrared counts", this->infrared_counts_sensor_);
95
99
  LOG_SENSOR(" ", "CH0 Visible+IR counts", this->full_spectrum_counts_sensor_);
96
100
  LOG_SENSOR(" ", "Actual gain", this->actual_gain_sensor_);
97
101
  }
98
102
  if (this->is_ps_()) {
99
- ESP_LOGCONFIG(TAG, " Proximity gain: %.0fx", get_ps_gain_coeff(this->ps_gain_));
100
- ESP_LOGCONFIG(TAG, " Proximity cooldown time: %d s", this->ps_cooldown_time_s_);
101
- ESP_LOGCONFIG(TAG, " Proximity high threshold: %d", this->ps_threshold_high_);
102
- ESP_LOGCONFIG(TAG, " Proximity low threshold: %d", this->ps_threshold_low_);
103
+ ESP_LOGCONFIG(TAG,
104
+ " Proximity gain: %.0fx\n"
105
+ " Proximity cooldown time: %d s\n"
106
+ " Proximity high threshold: %d\n"
107
+ " Proximity low threshold: %d",
108
+ get_ps_gain_coeff(this->ps_gain_), this->ps_cooldown_time_s_, this->ps_threshold_high_,
109
+ this->ps_threshold_low_);
103
110
  LOG_SENSOR(" ", "Proximity counts", this->proximity_counts_sensor_);
104
111
  }
105
112
  LOG_UPDATE_INTERVAL(this);
106
113
 
107
114
  if (this->is_failed()) {
108
- ESP_LOGE(TAG, "Communication with I2C LTR-303/329/55x/659 failed!");
115
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
109
116
  }
110
117
  }
111
118
 
@@ -298,7 +305,7 @@ void LTRAlsPsComponent::configure_als_() {
298
305
 
299
306
  uint8_t tries = MAX_TRIES;
300
307
  do {
301
- ESP_LOGV(TAG, "Waiting for device to become active...");
308
+ ESP_LOGV(TAG, "Waiting for device to become active");
302
309
  delay(2);
303
310
  als_ctrl.raw = this->reg((uint8_t) CommandRegisters::ALS_CONTR).get();
304
311
  } while (!als_ctrl.active_mode && tries--); // while active mode is not set - keep waiting
@@ -321,7 +321,7 @@ async def to_code(configs):
321
321
  frac = 2
322
322
  elif frac > 0.19:
323
323
  frac = 4
324
- else:
324
+ elif frac != 0:
325
325
  frac = 8
326
326
  displays = [
327
327
  await cg.get_variable(display) for display in config[df.CONF_DISPLAYS]
@@ -422,7 +422,7 @@ LVGL_SCHEMA = cv.All(
422
422
  ): lvalid.lv_font,
423
423
  cv.Optional(df.CONF_FULL_REFRESH, default=False): cv.boolean,
424
424
  cv.Optional(CONF_DRAW_ROUNDING, default=2): cv.positive_int,
425
- cv.Optional(CONF_BUFFER_SIZE, default="100%"): cv.percentage,
425
+ cv.Optional(CONF_BUFFER_SIZE, default=0): cv.percentage,
426
426
  cv.Optional(df.CONF_LOG_LEVEL, default="WARN"): cv.one_of(
427
427
  *df.LV_LOG_LEVELS, upper=True
428
428
  ),
@@ -1,4 +1,5 @@
1
- from typing import Any, Callable
1
+ from collections.abc import Callable
2
+ from typing import Any
2
3
 
3
4
  from esphome import automation
4
5
  import esphome.codegen as cg
@@ -20,7 +21,7 @@ from .defines import (
20
21
  literal,
21
22
  static_cast,
22
23
  )
23
- from .lv_validation import lv_bool, lv_color, lv_image, opacity
24
+ from .lv_validation import lv_bool, lv_color, lv_image, lv_milliseconds, opacity
24
25
  from .lvcode import (
25
26
  LVGL_COMP_ARG,
26
27
  UPDATE_EVENT,
@@ -128,14 +129,14 @@ async def lvgl_is_paused(config, condition_id, template_arg, args):
128
129
  LVGL_SCHEMA.extend(
129
130
  {
130
131
  cv.Required(CONF_TIMEOUT): cv.templatable(
131
- cv.positive_time_period_milliseconds
132
+ lv_milliseconds,
132
133
  )
133
134
  }
134
135
  ),
135
136
  )
136
137
  async def lvgl_is_idle(config, condition_id, template_arg, args):
137
138
  lvgl = config[CONF_LVGL_ID]
138
- timeout = await cg.templatable(config[CONF_TIMEOUT], [], cg.uint32)
139
+ timeout = await lv_milliseconds.process(config[CONF_TIMEOUT])
139
140
  async with LambdaContext(LVGL_COMP_ARG, return_type=cg.bool_) as context:
140
141
  lv_add(ReturnStatement(lvgl_comp.is_idle(timeout)))
141
142
  var = cg.new_Pvariable(
@@ -519,8 +519,6 @@ CONF_UPDATE_ON_RELEASE = "update_on_release"
519
519
  CONF_VISIBLE_ROW_COUNT = "visible_row_count"
520
520
  CONF_WIDGET = "widget"
521
521
  CONF_WIDGETS = "widgets"
522
- CONF_X = "x"
523
- CONF_Y = "y"
524
522
  CONF_ZOOM = "zoom"
525
523
 
526
524
  # Keypad keys
@@ -1,5 +1,3 @@
1
- from typing import Union
2
-
3
1
  import esphome.codegen as cg
4
2
  from esphome.components import image
5
3
  from esphome.components.color import CONF_HEX, ColorStruct, from_rgbw
@@ -361,7 +359,7 @@ lv_image_list = LValidator(
361
359
  lv_bool = LValidator(cv.boolean, cg.bool_, retmapper=literal)
362
360
 
363
361
 
364
- def lv_pct(value: Union[int, float]):
362
+ def lv_pct(value: int | float):
365
363
  if isinstance(value, float):
366
364
  value = int(value * 100)
367
365
  return literal(f"lv_pct({value})")
@@ -1,5 +1,4 @@
1
1
  import abc
2
- from typing import Union
3
2
 
4
3
  from esphome import codegen as cg
5
4
  from esphome.config import Config
@@ -75,7 +74,7 @@ class CodeContext(abc.ABC):
75
74
  code_context = None
76
75
 
77
76
  @abc.abstractmethod
78
- def add(self, expression: Union[Expression, Statement]):
77
+ def add(self, expression: Expression | Statement):
79
78
  pass
80
79
 
81
80
  @staticmethod
@@ -89,13 +88,13 @@ class CodeContext(abc.ABC):
89
88
  CodeContext.append(RawStatement("}"))
90
89
 
91
90
  @staticmethod
92
- def append(expression: Union[Expression, Statement]):
91
+ def append(expression: Expression | Statement):
93
92
  if CodeContext.code_context is not None:
94
93
  CodeContext.code_context.add(expression)
95
94
  return expression
96
95
 
97
96
  def __init__(self):
98
- self.previous: Union[CodeContext | None] = None
97
+ self.previous: CodeContext | None = None
99
98
  self.indent_level = 0
100
99
 
101
100
  async def __aenter__(self):
@@ -121,7 +120,7 @@ class MainContext(CodeContext):
121
120
  Code generation into the main() function
122
121
  """
123
122
 
124
- def add(self, expression: Union[Expression, Statement]):
123
+ def add(self, expression: Expression | Statement):
125
124
  return cg.add(self.indented_statement(expression))
126
125
 
127
126
 
@@ -144,7 +143,7 @@ class LambdaContext(CodeContext):
144
143
  self.capture = capture
145
144
  self.where = where
146
145
 
147
- def add(self, expression: Union[Expression, Statement]):
146
+ def add(self, expression: Expression | Statement):
148
147
  self.code_list.append(self.indented_statement(expression))
149
148
  return expression
150
149
 
@@ -186,7 +185,7 @@ class LvContext(LambdaContext):
186
185
  async def __aexit__(self, exc_type, exc_val, exc_tb):
187
186
  await super().__aexit__(exc_type, exc_val, exc_tb)
188
187
 
189
- def add(self, expression: Union[Expression, Statement]):
188
+ def add(self, expression: Expression | Statement):
190
189
  cg.add(expression)
191
190
  return expression
192
191
 
@@ -303,7 +302,7 @@ lvgl_static = MockObj("LvglComponent", "::")
303
302
 
304
303
 
305
304
  # equivalent to cg.add() for the current code context
306
- def lv_add(expression: Union[Expression, Statement]):
305
+ def lv_add(expression: Expression | Statement):
307
306
  return CodeContext.append(expression)
308
307
 
309
308
 
@@ -1,7 +1,7 @@
1
1
  #include "esphome/core/defines.h"
2
- #include "esphome/core/log.h"
3
- #include "esphome/core/helpers.h"
4
2
  #include "esphome/core/hal.h"
3
+ #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
  #include "lvgl_hal.h"
6
6
  #include "lvgl_esphome.h"
7
7
 
@@ -11,6 +11,8 @@ namespace esphome {
11
11
  namespace lvgl {
12
12
  static const char *const TAG = "lvgl";
13
13
 
14
+ static const size_t MIN_BUFFER_FRAC = 8;
15
+
14
16
  static const char *const EVENT_NAMES[] = {
15
17
  "NONE",
16
18
  "PRESSED",
@@ -83,10 +85,14 @@ static void rounder_cb(lv_disp_drv_t *disp_drv, lv_area_t *area) {
83
85
  lv_event_code_t lv_api_event; // NOLINT
84
86
  lv_event_code_t lv_update_event; // NOLINT
85
87
  void LvglComponent::dump_config() {
86
- ESP_LOGCONFIG(TAG, "LVGL:");
87
- ESP_LOGCONFIG(TAG, " Display width/height: %d x %d", this->disp_drv_.hor_res, this->disp_drv_.ver_res);
88
- ESP_LOGCONFIG(TAG, " Rotation: %d", this->rotation);
89
- ESP_LOGCONFIG(TAG, " Draw rounding: %d", (int) this->draw_rounding);
88
+ ESP_LOGCONFIG(TAG,
89
+ "LVGL:\n"
90
+ " Display width/height: %d x %d\n"
91
+ " Buffer size: %zu%%\n"
92
+ " Rotation: %d\n"
93
+ " Draw rounding: %d",
94
+ this->disp_drv_.hor_res, this->disp_drv_.ver_res, 100 / this->buffer_frac_, this->rotation,
95
+ (int) this->draw_rounding);
90
96
  }
91
97
  void LvglComponent::set_paused(bool paused, bool show_snow) {
92
98
  this->paused_ = paused;
@@ -432,18 +438,28 @@ void LvglComponent::setup() {
432
438
  auto *display = this->displays_[0];
433
439
  auto width = display->get_width();
434
440
  auto height = display->get_height();
435
- size_t buffer_pixels = width * height / this->buffer_frac_;
441
+ auto frac = this->buffer_frac_;
442
+ if (frac == 0)
443
+ frac = 1;
444
+ size_t buffer_pixels = width * height / frac;
436
445
  auto buf_bytes = buffer_pixels * LV_COLOR_DEPTH / 8;
437
446
  void *buffer = nullptr;
438
- if (this->buffer_frac_ >= 4)
447
+ if (this->buffer_frac_ >= MIN_BUFFER_FRAC / 2)
439
448
  buffer = malloc(buf_bytes); // NOLINT
440
449
  if (buffer == nullptr)
441
450
  buffer = lv_custom_mem_alloc(buf_bytes); // NOLINT
451
+ // if specific buffer size not set and can't get 100%, try for a smaller one
452
+ if (buffer == nullptr && this->buffer_frac_ == 0) {
453
+ frac = MIN_BUFFER_FRAC;
454
+ buffer_pixels /= MIN_BUFFER_FRAC;
455
+ buffer = lv_custom_mem_alloc(buf_bytes / MIN_BUFFER_FRAC); // NOLINT
456
+ }
442
457
  if (buffer == nullptr) {
443
- this->mark_failed();
444
458
  this->status_set_error("Memory allocation failure");
459
+ this->mark_failed();
445
460
  return;
446
461
  }
462
+ this->buffer_frac_ = frac;
447
463
  lv_disp_draw_buf_init(&this->draw_buf_, buffer, nullptr, buffer_pixels);
448
464
  this->disp_drv_.hor_res = width;
449
465
  this->disp_drv_.ver_res = height;
@@ -453,8 +469,8 @@ void LvglComponent::setup() {
453
469
  if (this->rotation != display::DISPLAY_ROTATION_0_DEGREES) {
454
470
  this->rotate_buf_ = static_cast<lv_color_t *>(lv_custom_mem_alloc(buf_bytes)); // NOLINT
455
471
  if (this->rotate_buf_ == nullptr) {
456
- this->mark_failed();
457
472
  this->status_set_error("Memory allocation failure");
473
+ this->mark_failed();
458
474
  return;
459
475
  }
460
476
  }
@@ -13,13 +13,15 @@ from esphome.const import (
13
13
  CONF_TIME,
14
14
  CONF_TRIGGER_ID,
15
15
  CONF_TYPE,
16
+ CONF_X,
17
+ CONF_Y,
16
18
  )
17
19
  from esphome.core import TimePeriod
18
20
  from esphome.core.config import StartupTrigger
19
21
  from esphome.schema_extractors import SCHEMA_EXTRACT
20
22
 
21
23
  from . import defines as df, lv_validation as lvalid
22
- from .defines import CONF_TIME_FORMAT, CONF_X, CONF_Y, LV_GRAD_DIR
24
+ from .defines import CONF_TIME_FORMAT, LV_GRAD_DIR
23
25
  from .helpers import add_lv_use, requires_component, validate_printf
24
26
  from .lv_validation import lv_color, lv_font, lv_gradient, lv_image, opacity
25
27
  from .lvcode import LvglComponent, lv_event_t_ptr
@@ -261,11 +263,13 @@ FLAG_LIST = cv.ensure_list(df.LvConstant("LV_OBJ_FLAG_", *df.OBJ_FLAGS).one_of)
261
263
  def part_schema(parts):
262
264
  """
263
265
  Generate a schema for the various parts (e.g. main:, indicator:) of a widget type
264
- :param parts: The parts to include in the schema
266
+ :param parts: The parts to include
265
267
  :return: The schema
266
268
  """
267
- return cv.Schema({cv.Optional(part): STATE_SCHEMA for part in parts}).extend(
268
- STATE_SCHEMA
269
+ return (
270
+ cv.Schema({cv.Optional(part): STATE_SCHEMA for part in parts})
271
+ .extend(STATE_SCHEMA)
272
+ .extend(FLAG_SCHEMA)
269
273
  )
270
274
 
271
275
 
@@ -302,22 +306,18 @@ def base_update_schema(widget_type, parts):
302
306
  :param parts: The allowable parts to specify
303
307
  :return:
304
308
  """
305
- return (
306
- part_schema(parts)
307
- .extend(
308
- {
309
- cv.Required(CONF_ID): cv.ensure_list(
310
- cv.maybe_simple_value(
311
- {
312
- cv.Required(CONF_ID): cv.use_id(widget_type),
313
- },
314
- key=CONF_ID,
315
- )
316
- ),
317
- cv.Optional(CONF_STATE): SET_STATE_SCHEMA,
318
- }
319
- )
320
- .extend(FLAG_SCHEMA)
309
+ return part_schema(parts).extend(
310
+ {
311
+ cv.Required(CONF_ID): cv.ensure_list(
312
+ cv.maybe_simple_value(
313
+ {
314
+ cv.Required(CONF_ID): cv.use_id(widget_type),
315
+ },
316
+ key=CONF_ID,
317
+ )
318
+ ),
319
+ cv.Optional(CONF_STATE): SET_STATE_SCHEMA,
320
+ }
321
321
  )
322
322
 
323
323
 
@@ -335,7 +335,6 @@ def obj_schema(widget_type: WidgetType):
335
335
  """
336
336
  return (
337
337
  part_schema(widget_type.parts)
338
- .extend(FLAG_SCHEMA)
339
338
  .extend(LAYOUT_SCHEMA)
340
339
  .extend(ALIGN_TO_SCHEMA)
341
340
  .extend(automation_schema(widget_type.w_type))
@@ -357,8 +356,8 @@ ALIGN_TO_SCHEMA = {
357
356
  {
358
357
  cv.Required(CONF_ID): cv.use_id(lv_obj_t),
359
358
  cv.Required(df.CONF_ALIGN): df.ALIGN_ALIGNMENTS.one_of,
360
- cv.Optional(df.CONF_X, default=0): lvalid.pixels_or_percent,
361
- cv.Optional(df.CONF_Y, default=0): lvalid.pixels_or_percent,
359
+ cv.Optional(CONF_X, default=0): lvalid.pixels_or_percent,
360
+ cv.Optional(CONF_Y, default=0): lvalid.pixels_or_percent,
362
361
  }
363
362
  )
364
363
  }
@@ -1,12 +1,17 @@
1
1
  from esphome import automation
2
2
  import esphome.codegen as cg
3
- from esphome.const import CONF_ID, CONF_ON_BOOT, CONF_ON_VALUE, CONF_TRIGGER_ID
3
+ from esphome.const import (
4
+ CONF_ID,
5
+ CONF_ON_BOOT,
6
+ CONF_ON_VALUE,
7
+ CONF_TRIGGER_ID,
8
+ CONF_X,
9
+ CONF_Y,
10
+ )
4
11
 
5
12
  from .defines import (
6
13
  CONF_ALIGN,
7
14
  CONF_ALIGN_TO,
8
- CONF_X,
9
- CONF_Y,
10
15
  DIRECTIONS,
11
16
  LV_EVENT_MAP,
12
17
  LV_EVENT_TRIGGERS,
@@ -1,5 +1,5 @@
1
1
  import sys
2
- from typing import Any, Union
2
+ from typing import Any
3
3
 
4
4
  from esphome import codegen as cg, config_validation as cv
5
5
  from esphome.config_validation import Invalid
@@ -262,7 +262,7 @@ async def wait_for_widgets():
262
262
  await FakeAwaitable(widgets_wait_generator())
263
263
 
264
264
 
265
- async def get_widgets(config: Union[dict, list], id: str = CONF_ID) -> list[Widget]:
265
+ async def get_widgets(config: dict | list, id: str = CONF_ID) -> list[Widget]:
266
266
  if not config:
267
267
  return []
268
268
  if not isinstance(config, list):
@@ -1,6 +1,14 @@
1
1
  from esphome import automation, codegen as cg, config_validation as cv
2
2
  from esphome.components.display_menu_base import CONF_LABEL
3
- from esphome.const import CONF_COLOR, CONF_HEIGHT, CONF_ID, CONF_TEXT, CONF_WIDTH
3
+ from esphome.const import (
4
+ CONF_COLOR,
5
+ CONF_HEIGHT,
6
+ CONF_ID,
7
+ CONF_TEXT,
8
+ CONF_WIDTH,
9
+ CONF_X,
10
+ CONF_Y,
11
+ )
4
12
  from esphome.cpp_generator import Literal, MockObj
5
13
 
6
14
  from ..automation import action_to_code
@@ -13,8 +21,6 @@ from ..defines import (
13
21
  CONF_POINTS,
14
22
  CONF_SRC,
15
23
  CONF_START_ANGLE,
16
- CONF_X,
17
- CONF_Y,
18
24
  literal,
19
25
  )
20
26
  from ..lv_validation import (
@@ -1,8 +1,9 @@
1
1
  import esphome.codegen as cg
2
2
  import esphome.config_validation as cv
3
+ from esphome.const import CONF_X, CONF_Y
3
4
  from esphome.core import Lambda
4
5
 
5
- from ..defines import CONF_MAIN, CONF_X, CONF_Y, call_lambda
6
+ from ..defines import CONF_MAIN, call_lambda
6
7
  from ..lvcode import lv_add
7
8
  from ..schemas import point_schema
8
9
  from ..types import LvCompound, LvType
@@ -24,6 +24,7 @@ from .obj import obj_spec
24
24
 
25
25
  CONF_TABVIEW = "tabview"
26
26
  CONF_TAB_STYLE = "tab_style"
27
+ CONF_CONTENT_STYLE = "content_style"
27
28
 
28
29
  lv_tab_t = LvType("lv_obj_t")
29
30
 
@@ -39,6 +40,7 @@ TABVIEW_SCHEMA = cv.Schema(
39
40
  )
40
41
  ),
41
42
  cv.Optional(CONF_TAB_STYLE): part_schema(buttonmatrix_spec.parts),
43
+ cv.Optional(CONF_CONTENT_STYLE): part_schema(obj_spec.parts),
42
44
  cv.Optional(CONF_POSITION, default="top"): DIRECTIONS.one_of,
43
45
  cv.Optional(CONF_SIZE, default="10%"): size,
44
46
  }
@@ -79,6 +81,11 @@ class TabviewType(WidgetType):
79
81
  "tabview_btnmatrix", lv_obj_t, rhs=lv_expr.tabview_get_tab_btns(w.obj)
80
82
  ) as btnmatrix_obj:
81
83
  await set_obj_properties(Widget(btnmatrix_obj, obj_spec), button_style)
84
+ if content_style := config.get(CONF_CONTENT_STYLE):
85
+ with LocalVariable(
86
+ "tabview_content", lv_obj_t, rhs=lv_expr.tabview_get_content(w.obj)
87
+ ) as content_obj:
88
+ await set_obj_properties(Widget(content_obj, obj_spec), content_style)
82
89
 
83
90
  def obj_creator(self, parent: MockObjClass, config: dict):
84
91
  return lv_expr.call(
@@ -8,19 +8,19 @@ namespace m5stack_8angle {
8
8
  static const char *const TAG = "m5stack_8angle";
9
9
 
10
10
  void M5Stack8AngleComponent::setup() {
11
- ESP_LOGCONFIG(TAG, "Setting up M5STACK_8ANGLE...");
11
+ ESP_LOGCONFIG(TAG, "Running setup");
12
12
  i2c::ErrorCode err;
13
13
 
14
14
  err = this->read(nullptr, 0);
15
15
  if (err != i2c::NO_ERROR) {
16
- ESP_LOGE(TAG, "I2C error %02X...", err);
16
+ ESP_LOGE(TAG, "I2C error %02X", err);
17
17
  this->mark_failed();
18
18
  return;
19
19
  };
20
20
 
21
21
  err = this->read_register(M5STACK_8ANGLE_REGISTER_FW_VERSION, &this->fw_version_, 1);
22
22
  if (err != i2c::NO_ERROR) {
23
- ESP_LOGE(TAG, "I2C error %02X...", err);
23
+ ESP_LOGE(TAG, "I2C error %02X", err);
24
24
  this->mark_failed();
25
25
  return;
26
26
  };
@@ -97,8 +97,8 @@ void MatrixKeypad::loop() {
97
97
  }
98
98
 
99
99
  void MatrixKeypad::dump_config() {
100
- ESP_LOGCONFIG(TAG, "Matrix Keypad:");
101
- ESP_LOGCONFIG(TAG, " Rows:");
100
+ ESP_LOGCONFIG(TAG, "Matrix Keypad:\n"
101
+ " Rows:");
102
102
  for (auto &pin : this->rows_) {
103
103
  LOG_PIN(" Pin: ", pin);
104
104
  }
@@ -41,7 +41,7 @@ void MAX17043Component::update() {
41
41
  }
42
42
 
43
43
  void MAX17043Component::setup() {
44
- ESP_LOGCONFIG(TAG, "Setting up MAX17043...");
44
+ ESP_LOGCONFIG(TAG, "Running setup");
45
45
 
46
46
  uint16_t config_reg;
47
47
  if (this->write(&MAX17043_CONFIG, 1) != i2c::ERROR_OK) {
@@ -76,7 +76,7 @@ void MAX17043Component::dump_config() {
76
76
  ESP_LOGCONFIG(TAG, "MAX17043:");
77
77
  LOG_I2C_DEVICE(this);
78
78
  if (this->is_failed()) {
79
- ESP_LOGE(TAG, "Communication with MAX17043 failed");
79
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
80
80
  }
81
81
  LOG_UPDATE_INTERVAL(this);
82
82
  LOG_SENSOR(" ", "Battery Voltage", this->voltage_sensor_);
@@ -1,5 +1,6 @@
1
1
  #include "max31855.h"
2
2
 
3
+ #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
5
6
  namespace esphome {
@@ -19,7 +20,7 @@ void MAX31855Sensor::update() {
19
20
  }
20
21
 
21
22
  void MAX31855Sensor::setup() {
22
- ESP_LOGCONFIG(TAG, "Setting up MAX31855Sensor '%s'...", this->name_.c_str());
23
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
23
24
  this->spi_setup();
24
25
  }
25
26
  void MAX31855Sensor::dump_config() {
@@ -11,7 +11,7 @@ static const char *const TAG = "max31856";
11
11
  // Based on Adafruit's library: https://github.com/adafruit/Adafruit_MAX31856
12
12
 
13
13
  void MAX31856Sensor::setup() {
14
- ESP_LOGCONFIG(TAG, "Setting up MAX31856Sensor '%s'...", this->name_.c_str());
14
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
15
15
  this->spi_setup();
16
16
 
17
17
  // assert on any fault
@@ -23,8 +23,6 @@ void MAX31856Sensor::setup() {
23
23
 
24
24
  this->set_thermocouple_type_();
25
25
  this->set_noise_filter_();
26
-
27
- ESP_LOGCONFIG(TAG, "Completed setting up MAX31856Sensor '%s'...", this->name_.c_str());
28
26
  }
29
27
 
30
28
  void MAX31856Sensor::dump_config() {
@@ -97,28 +95,28 @@ bool MAX31856Sensor::has_fault_() {
97
95
  this->status_set_warning();
98
96
 
99
97
  if ((faults & MAX31856_FAULT_CJRANGE) == MAX31856_FAULT_CJRANGE) {
100
- ESP_LOGW(TAG, "Cold Junction Out-of-Range: '%s'...", this->name_.c_str());
98
+ ESP_LOGW(TAG, "Cold Junction Out-of-Range: '%s'", this->name_.c_str());
101
99
  }
102
100
  if ((faults & MAX31856_FAULT_TCRANGE) == MAX31856_FAULT_TCRANGE) {
103
- ESP_LOGW(TAG, "Thermocouple Out-of-Range: '%s'...", this->name_.c_str());
101
+ ESP_LOGW(TAG, "Thermocouple Out-of-Range: '%s'", this->name_.c_str());
104
102
  }
105
103
  if ((faults & MAX31856_FAULT_CJHIGH) == MAX31856_FAULT_CJHIGH) {
106
- ESP_LOGW(TAG, "Cold-Junction High Fault: '%s'...", this->name_.c_str());
104
+ ESP_LOGW(TAG, "Cold-Junction High Fault: '%s'", this->name_.c_str());
107
105
  }
108
106
  if ((faults & MAX31856_FAULT_CJLOW) == MAX31856_FAULT_CJLOW) {
109
- ESP_LOGW(TAG, "Cold-Junction Low Fault: '%s'...", this->name_.c_str());
107
+ ESP_LOGW(TAG, "Cold-Junction Low Fault: '%s'", this->name_.c_str());
110
108
  }
111
109
  if ((faults & MAX31856_FAULT_TCHIGH) == MAX31856_FAULT_TCHIGH) {
112
- ESP_LOGW(TAG, "Thermocouple Temperature High Fault: '%s'...", this->name_.c_str());
110
+ ESP_LOGW(TAG, "Thermocouple Temperature High Fault: '%s'", this->name_.c_str());
113
111
  }
114
112
  if ((faults & MAX31856_FAULT_TCLOW) == MAX31856_FAULT_TCLOW) {
115
- ESP_LOGW(TAG, "Thermocouple Temperature Low Fault: '%s'...", this->name_.c_str());
113
+ ESP_LOGW(TAG, "Thermocouple Temperature Low Fault: '%s'", this->name_.c_str());
116
114
  }
117
115
  if ((faults & MAX31856_FAULT_OVUV) == MAX31856_FAULT_OVUV) {
118
- ESP_LOGW(TAG, "Overvoltage or Undervoltage Input Fault: '%s'...", this->name_.c_str());
116
+ ESP_LOGW(TAG, "Overvoltage or Undervoltage Input Fault: '%s'", this->name_.c_str());
119
117
  }
120
118
  if ((faults & MAX31856_FAULT_OPEN) == MAX31856_FAULT_OPEN) {
121
- ESP_LOGW(TAG, "Thermocouple Open-Circuit Fault (possibly not connected): '%s'...", this->name_.c_str());
119
+ ESP_LOGW(TAG, "Thermocouple Open-Circuit Fault (possibly not connected): '%s'", this->name_.c_str());
122
120
  }
123
121
 
124
122
  return true;
@@ -65,7 +65,7 @@ void MAX31865Sensor::update() {
65
65
  }
66
66
 
67
67
  void MAX31865Sensor::setup() {
68
- ESP_LOGCONFIG(TAG, "Setting up MAX31865Sensor '%s'...", this->name_.c_str());
68
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
69
69
  this->spi_setup();
70
70
 
71
71
  // Build base configuration
@@ -83,9 +83,11 @@ void MAX31865Sensor::dump_config() {
83
83
  LOG_SENSOR("", "MAX31865", this);
84
84
  LOG_PIN(" CS Pin: ", this->cs_);
85
85
  LOG_UPDATE_INTERVAL(this);
86
- ESP_LOGCONFIG(TAG, " Reference Resistance: %.2fΩ", reference_resistance_);
87
- ESP_LOGCONFIG(TAG, " RTD: %u-wire %.2fΩ", rtd_wires_, rtd_nominal_resistance_);
88
- ESP_LOGCONFIG(TAG, " Mains Filter: %s",
86
+ ESP_LOGCONFIG(TAG,
87
+ " Reference Resistance: %.2fΩ\n"
88
+ " RTD: %u-wire %.2fΩ\n"
89
+ " Mains Filter: %s",
90
+ reference_resistance_, rtd_wires_, rtd_nominal_resistance_,
89
91
  (filter_ == FILTER_60HZ ? "60 Hz" : (filter_ == FILTER_50HZ ? "50 Hz" : "Unknown!")));
90
92
  }
91
93
 
@@ -21,7 +21,7 @@ static const uint8_t MAX44009_ERROR_HIGH_BYTE = -30;
21
21
  static const uint8_t MAX44009_ERROR_LOW_BYTE = -31;
22
22
 
23
23
  void MAX44009Sensor::setup() {
24
- ESP_LOGCONFIG(TAG, "Setting up MAX44009...");
24
+ ESP_LOGCONFIG(TAG, "Running setup");
25
25
  bool state_ok = false;
26
26
  if (this->mode_ == MAX44009Mode::MAX44009_MODE_LOW_POWER) {
27
27
  state_ok = this->set_low_power_mode();
@@ -48,7 +48,7 @@ void MAX44009Sensor::dump_config() {
48
48
  ESP_LOGCONFIG(TAG, "MAX44009:");
49
49
  LOG_I2C_DEVICE(this);
50
50
  if (this->is_failed()) {
51
- ESP_LOGE(TAG, "Communication with MAX44009 failed!");
51
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
52
52
  }
53
53
  }
54
54
 
@@ -18,7 +18,7 @@ void MAX6675Sensor::update() {
18
18
  }
19
19
 
20
20
  void MAX6675Sensor::setup() {
21
- ESP_LOGCONFIG(TAG, "Setting up MAX6675Sensor '%s'...", this->name_.c_str());
21
+ ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
22
22
  this->spi_setup();
23
23
  }
24
24
  void MAX6675Sensor::dump_config() {