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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (750) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +5 -0
  33. esphome/components/api/api_pb2.h +703 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -1
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/preferences.cpp +6 -6
  191. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  192. esphome/components/esp_ldo/__init__.py +91 -0
  193. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  194. esphome/components/esp_ldo/esp_ldo.h +43 -0
  195. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  196. esphome/components/ethernet/ethernet_component.cpp +38 -26
  197. esphome/components/ethernet/ethernet_component.h +1 -1
  198. esphome/components/event/__init__.py +1 -0
  199. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  200. esphome/components/ezo/ezo.cpp +1 -1
  201. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  202. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  203. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  204. esphome/components/fan/__init__.py +1 -0
  205. esphome/components/fan/fan.cpp +30 -19
  206. esphome/components/fastled_base/fastled_light.cpp +7 -5
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  208. esphome/components/fs3000/fs3000.cpp +1 -1
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  210. esphome/components/ft63x6/ft63x6.cpp +5 -3
  211. esphome/components/gcja5/gcja5.cpp +0 -12
  212. esphome/components/gcja5/gcja5.h +8 -3
  213. esphome/components/gdk101/gdk101.cpp +2 -2
  214. esphome/components/globals/globals_component.h +13 -10
  215. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  216. esphome/components/gp8403/gp8403.cpp +4 -2
  217. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  218. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  219. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  220. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  221. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  222. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  223. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  225. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  227. esphome/components/haier/haier_base.cpp +2 -2
  228. esphome/components/haier/hon_climate.cpp +13 -6
  229. esphome/components/havells_solar/havells_solar.cpp +5 -2
  230. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  231. esphome/components/hdc1080/hdc1080.cpp +2 -2
  232. esphome/components/he60r/he60r.cpp +4 -2
  233. esphome/components/hlw8012/hlw8012.cpp +6 -4
  234. esphome/components/hm3301/hm3301.cpp +2 -2
  235. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  236. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  237. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  238. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  239. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  240. esphome/components/hte501/hte501.cpp +3 -2
  241. esphome/components/http_request/__init__.py +2 -2
  242. esphome/components/http_request/http_request.cpp +7 -5
  243. esphome/components/http_request/http_request_idf.cpp +4 -2
  244. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  245. esphome/components/htu21d/htu21d.cpp +2 -2
  246. esphome/components/htu31d/htu31d.cpp +2 -2
  247. esphome/components/hx711/hx711.cpp +2 -2
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  249. esphome/components/hyt271/hyt271.cpp +2 -2
  250. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  251. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  252. esphome/components/i2s_audio/__init__.py +2 -0
  253. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  254. esphome/components/i2s_audio/i2s_audio.h +1 -1
  255. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  257. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +48 -30
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -0
  259. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  261. esphome/components/iaqcore/iaqcore.cpp +3 -3
  262. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  263. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  264. esphome/components/image/image.cpp +1 -0
  265. esphome/components/ina219/ina219.cpp +2 -2
  266. esphome/components/ina226/ina226.cpp +8 -5
  267. esphome/components/ina260/ina260.cpp +1 -1
  268. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  269. esphome/components/ina3221/ina3221.cpp +2 -2
  270. esphome/components/inkplate6/display.py +12 -2
  271. esphome/components/inkplate6/inkplate.cpp +13 -9
  272. esphome/components/inkplate6/inkplate.h +7 -6
  273. esphome/components/integration/integration_sensor.cpp +1 -1
  274. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  275. esphome/components/json/json_util.cpp +4 -5
  276. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  277. esphome/components/key_collector/key_collector.cpp +4 -2
  278. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  279. esphome/components/kuntze/kuntze.cpp +4 -2
  280. esphome/components/lc709203f/__init__.py +1 -0
  281. esphome/components/lc709203f/lc709203f.cpp +299 -0
  282. esphome/components/lc709203f/lc709203f.h +55 -0
  283. esphome/components/lc709203f/sensor.py +93 -0
  284. esphome/components/lcd_base/lcd_display.cpp +2 -2
  285. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  286. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  287. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  288. esphome/components/ld2410/ld2410.cpp +6 -7
  289. esphome/components/ld2420/ld2420.cpp +9 -7
  290. esphome/components/ld2450/ld2450.cpp +6 -4
  291. esphome/components/ld2450/sensor.py +2 -2
  292. esphome/components/ledc/ledc_output.cpp +32 -28
  293. esphome/components/libretiny/const.py +1 -1
  294. esphome/components/libretiny/preferences.cpp +6 -7
  295. esphome/components/light/__init__.py +2 -1
  296. esphome/components/light/esp_hsv_color.h +1 -1
  297. esphome/components/light/light_state.cpp +9 -5
  298. esphome/components/light/light_state.h +15 -15
  299. esphome/components/light/light_transformer.h +1 -1
  300. esphome/components/lightwaverf/LwTx.cpp +1 -1
  301. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  302. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  303. esphome/components/lock/__init__.py +1 -0
  304. esphome/components/lock/lock.h +1 -1
  305. esphome/components/logger/__init__.py +6 -0
  306. esphome/components/logger/logger.cpp +11 -20
  307. esphome/components/logger/logger.h +1 -2
  308. esphome/components/logger/logger_esp32.cpp +5 -5
  309. esphome/components/ltr390/ltr390.cpp +8 -5
  310. esphome/components/ltr501/ltr501.cpp +19 -14
  311. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  312. esphome/components/lvgl/__init__.py +2 -2
  313. esphome/components/lvgl/automation.py +5 -4
  314. esphome/components/lvgl/defines.py +0 -2
  315. esphome/components/lvgl/lv_validation.py +1 -3
  316. esphome/components/lvgl/lvcode.py +7 -8
  317. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  318. esphome/components/lvgl/schemas.py +22 -23
  319. esphome/components/lvgl/trigger.py +8 -3
  320. esphome/components/lvgl/widgets/__init__.py +2 -2
  321. esphome/components/lvgl/widgets/canvas.py +9 -3
  322. esphome/components/lvgl/widgets/line.py +2 -1
  323. esphome/components/lvgl/widgets/tabview.py +7 -0
  324. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  325. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  326. esphome/components/max17043/max17043.cpp +2 -2
  327. esphome/components/max31855/max31855.cpp +2 -1
  328. esphome/components/max31856/max31856.cpp +9 -11
  329. esphome/components/max31865/max31865.cpp +6 -4
  330. esphome/components/max44009/max44009.cpp +2 -2
  331. esphome/components/max6675/max6675.cpp +1 -1
  332. esphome/components/max6956/max6956.cpp +5 -3
  333. esphome/components/max7219/max7219.cpp +8 -6
  334. esphome/components/max7219digit/automation.h +52 -0
  335. esphome/components/max7219digit/display.py +93 -1
  336. esphome/components/max7219digit/max7219digit.cpp +16 -13
  337. esphome/components/max9611/max9611.cpp +9 -6
  338. esphome/components/mcp23008/mcp23008.cpp +1 -1
  339. esphome/components/mcp23016/mcp23016.cpp +1 -1
  340. esphome/components/mcp23017/mcp23017.cpp +1 -1
  341. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  342. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  343. esphome/components/mcp3008/mcp3008.cpp +1 -1
  344. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  345. esphome/components/mcp3204/mcp3204.cpp +1 -1
  346. esphome/components/mcp4461/mcp4461.cpp +2 -2
  347. esphome/components/mcp4725/mcp4725.cpp +2 -2
  348. esphome/components/mcp4728/mcp4728.cpp +2 -2
  349. esphome/components/mcp9600/mcp9600.cpp +1 -1
  350. esphome/components/mcp9808/mcp9808.cpp +4 -4
  351. esphome/components/mdns/mdns_component.cpp +8 -2
  352. esphome/components/mdns/mdns_component.h +3 -1
  353. esphome/components/mdns/mdns_esp32.cpp +2 -2
  354. esphome/components/media_player/__init__.py +1 -0
  355. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  356. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  357. esphome/components/micronova/micronova.h +2 -2
  358. esphome/components/mics_4514/mics_4514.cpp +2 -2
  359. esphome/components/midea/air_conditioner.cpp +7 -5
  360. esphome/components/midea_ir/midea_ir.cpp +1 -1
  361. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  362. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  363. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  364. esphome/components/mlx90614/mlx90614.cpp +4 -3
  365. esphome/components/mmc5603/mmc5603.cpp +2 -2
  366. esphome/components/mmc5983/mmc5983.cpp +1 -1
  367. esphome/components/modbus/modbus.cpp +7 -5
  368. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  369. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  370. esphome/components/modbus_controller/switch/__init__.py +6 -2
  371. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  372. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  373. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  374. esphome/components/mpr121/mpr121.cpp +2 -2
  375. esphome/components/mpu6050/mpu6050.cpp +6 -6
  376. esphome/components/mpu6886/mpu6886.cpp +6 -6
  377. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  378. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  379. esphome/components/mqtt/mqtt_client.cpp +31 -24
  380. esphome/components/mqtt/mqtt_component.cpp +3 -3
  381. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  382. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  383. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  384. esphome/components/ms5611/ms5611.cpp +2 -2
  385. esphome/components/ms8607/ms8607.cpp +2 -2
  386. esphome/components/msa3xx/msa3xx.cpp +16 -12
  387. esphome/components/my9231/my9231.cpp +7 -5
  388. esphome/components/nau7802/nau7802.cpp +6 -4
  389. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  390. esphome/components/network/ip_address.h +1 -1
  391. esphome/components/network/util.cpp +13 -0
  392. esphome/components/nextion/base_component.py +2 -0
  393. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  394. esphome/components/nextion/display.py +34 -22
  395. esphome/components/nextion/nextion.cpp +182 -143
  396. esphome/components/nextion/nextion.h +36 -0
  397. esphome/components/nextion/nextion_commands.cpp +3 -3
  398. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  399. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  400. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  401. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  402. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  403. esphome/components/nfc/nci_message.h +1 -1
  404. esphome/components/nfc/ndef_record.h +1 -1
  405. esphome/components/nfc/ndef_record_text.h +1 -1
  406. esphome/components/nfc/ndef_record_uri.h +1 -1
  407. esphome/components/nfc/nfc.h +1 -1
  408. esphome/components/nfc/nfc_tag.h +1 -1
  409. esphome/components/noblex/noblex.cpp +1 -1
  410. esphome/components/npi19/npi19.cpp +5 -7
  411. esphome/components/number/__init__.py +11 -0
  412. esphome/components/number/number.cpp +1 -1
  413. esphome/components/number/number.h +0 -4
  414. esphome/components/online_image/__init__.py +13 -1
  415. esphome/components/online_image/online_image.cpp +26 -4
  416. esphome/components/online_image/online_image.h +21 -4
  417. esphome/components/opentherm/generate.py +3 -3
  418. esphome/components/opentherm/hub.cpp +11 -7
  419. esphome/components/opentherm/number/number.cpp +5 -3
  420. esphome/components/opentherm/opentherm.h +1 -1
  421. esphome/components/opentherm/schema.py +13 -13
  422. esphome/components/opentherm/validate.py +1 -1
  423. esphome/components/openthread/__init__.py +146 -0
  424. esphome/components/openthread/const.py +10 -0
  425. esphome/components/openthread/openthread.cpp +206 -0
  426. esphome/components/openthread/openthread.h +68 -0
  427. esphome/components/openthread/openthread_esp.cpp +164 -0
  428. esphome/components/openthread/tlv.py +58 -0
  429. esphome/components/openthread_info/__init__.py +0 -0
  430. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  432. esphome/components/openthread_info/text_sensor.py +105 -0
  433. esphome/components/output/float_output.cpp +1 -1
  434. esphome/components/output/switch/output_switch.cpp +1 -1
  435. esphome/components/packet_transport/packet_transport.cpp +6 -4
  436. esphome/components/pca6416a/pca6416a.cpp +2 -2
  437. esphome/components/pca9554/pca9554.cpp +6 -4
  438. esphome/components/pca9685/pca9685_output.cpp +12 -8
  439. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  440. esphome/components/pcf85063/pcf85063.cpp +2 -2
  441. esphome/components/pcf8563/pcf8563.cpp +2 -2
  442. esphome/components/pcf8574/pcf8574.cpp +2 -2
  443. esphome/components/pid/pid_climate.cpp +8 -5
  444. esphome/components/pid/pid_climate.h +1 -1
  445. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  446. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  447. esphome/components/pipsolar/pipsolar.cpp +3 -3
  448. esphome/components/pm1006/pm1006.cpp +3 -7
  449. esphome/components/pm1006/pm1006.h +4 -1
  450. esphome/components/pm2005/pm2005.cpp +12 -13
  451. esphome/components/pm2005/sensor.py +1 -1
  452. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  453. esphome/components/pmsx003/pmsx003.cpp +0 -4
  454. esphome/components/pmsx003/pmsx003.h +5 -2
  455. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  456. esphome/components/pmwcs3/pmwcs3.h +0 -1
  457. esphome/components/pn532/pn532.cpp +7 -7
  458. esphome/components/pn532/pn532.h +1 -1
  459. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  460. esphome/components/pn7150/pn7150.cpp +4 -4
  461. esphome/components/pn7160/pn7160.cpp +4 -4
  462. esphome/components/power_supply/power_supply.cpp +6 -4
  463. esphome/components/power_supply/power_supply.h +1 -1
  464. esphome/components/prometheus/__init__.py +0 -1
  465. esphome/components/psram/__init__.py +59 -35
  466. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  467. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  468. esphome/components/pylontech/pylontech.cpp +2 -2
  469. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  470. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  471. esphome/components/pzemac/pzemac.cpp +4 -2
  472. esphome/components/pzemdc/pzemdc.cpp +4 -2
  473. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  474. esphome/components/qmp6988/qmp6988.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.h +1 -1
  476. esphome/components/qr_code/qr_code.cpp +5 -3
  477. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  478. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  479. esphome/components/rc522/rc522.cpp +5 -5
  480. esphome/components/rdm6300/rdm6300.cpp +1 -0
  481. esphome/components/remote_receiver/__init__.py +10 -2
  482. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  483. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  484. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  485. esphome/components/remote_transmitter/__init__.py +10 -2
  486. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  487. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  488. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  489. esphome/components/resistance/resistance_sensor.cpp +6 -3
  490. esphome/components/restart/button/restart_button.cpp +1 -1
  491. esphome/components/restart/switch/restart_switch.cpp +1 -1
  492. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  493. esphome/components/rp2040/__init__.py +7 -0
  494. esphome/components/rp2040/core.cpp +8 -1
  495. esphome/components/rp2040/preferences.cpp +3 -3
  496. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  497. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  498. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  499. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  500. esphome/components/rtttl/rtttl.cpp +11 -9
  501. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  502. esphome/components/safe_mode/safe_mode.cpp +9 -8
  503. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  504. esphome/components/scd30/scd30.cpp +11 -8
  505. esphome/components/scd4x/scd4x.cpp +12 -8
  506. esphome/components/sdl/display.py +40 -0
  507. esphome/components/sdl/sdl_esphome.cpp +2 -2
  508. esphome/components/sdl/sdl_esphome.h +8 -0
  509. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  510. esphome/components/sdp3x/sdp3x.cpp +11 -11
  511. esphome/components/sds011/sds011.cpp +5 -6
  512. esphome/components/sds011/sds011.h +4 -1
  513. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  514. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  515. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  516. esphome/components/selec_meter/selec_meter.cpp +5 -2
  517. esphome/components/select/__init__.py +1 -0
  518. esphome/components/select/select.cpp +1 -1
  519. esphome/components/select/select.h +0 -4
  520. esphome/components/sen0321/sen0321.cpp +2 -2
  521. esphome/components/sen21231/sen21231.cpp +1 -1
  522. esphome/components/sen5x/sen5x.cpp +10 -7
  523. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  524. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  525. esphome/components/sensor/__init__.py +11 -1
  526. esphome/components/sensor/filter.h +1 -1
  527. esphome/components/sensor/sensor.cpp +8 -4
  528. esphome/components/sensor/sensor.h +12 -11
  529. esphome/components/servo/servo.cpp +12 -9
  530. esphome/components/servo/servo.h +1 -1
  531. esphome/components/sfa30/sfa30.cpp +1 -1
  532. esphome/components/sgp30/sgp30.cpp +10 -8
  533. esphome/components/sgp4x/sgp4x.cpp +49 -61
  534. esphome/components/sgp4x/sgp4x.h +0 -1
  535. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  536. esphome/components/sht3xd/sht3xd.cpp +1 -1
  537. esphome/components/sht4x/sht4x.cpp +2 -2
  538. esphome/components/shtcx/shtcx.cpp +13 -16
  539. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  540. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  541. esphome/components/sim800l/sim800l.cpp +2 -2
  542. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  543. esphome/components/sm16716/sm16716.cpp +1 -1
  544. esphome/components/sm2135/sm2135.cpp +1 -1
  545. esphome/components/sm2235/sm2235.cpp +5 -3
  546. esphome/components/sm2335/sm2335.cpp +5 -3
  547. esphome/components/sml/sml.cpp +1 -1
  548. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  549. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  550. esphome/components/sntp/sntp_component.cpp +1 -1
  551. esphome/components/socket/__init__.py +2 -0
  552. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  553. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  554. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  555. esphome/components/socket/socket.cpp +31 -0
  556. esphome/components/socket/socket.h +27 -1
  557. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  558. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  559. esphome/components/sound_level/sound_level.cpp +4 -2
  560. esphome/components/speaker/media_player/__init__.py +3 -0
  561. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  562. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  563. esphome/components/spi/__init__.py +10 -2
  564. esphome/components/spi/spi.cpp +4 -4
  565. esphome/components/spi/spi_arduino.cpp +22 -9
  566. esphome/components/spi_device/spi_device.cpp +1 -2
  567. esphome/components/sprinkler/sprinkler.cpp +9 -6
  568. esphome/components/sps30/sps30.cpp +16 -15
  569. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  570. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  571. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  572. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  573. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  574. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  575. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  576. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  577. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  578. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  579. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  580. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  581. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  582. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  583. esphome/components/st7567_base/st7567_base.cpp +3 -3
  584. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  585. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  586. esphome/components/st7701s/st7701s.cpp +4 -2
  587. esphome/components/st7735/st7735.cpp +3 -3
  588. esphome/components/st7789v/st7789v.cpp +10 -7
  589. esphome/components/st7920/st7920.cpp +6 -4
  590. esphome/components/statsd/statsd.cpp +9 -5
  591. esphome/components/status_led/light/status_led_light.cpp +3 -3
  592. esphome/components/status_led/light/status_led_light.h +1 -1
  593. esphome/components/status_led/status_led.cpp +1 -1
  594. esphome/components/stepper/stepper.h +5 -3
  595. esphome/components/sts3x/sts3x.cpp +2 -2
  596. esphome/components/switch/__init__.py +1 -0
  597. esphome/components/switch/switch.cpp +18 -12
  598. esphome/components/switch/switch.h +14 -8
  599. esphome/components/sx1509/__init__.py +53 -20
  600. esphome/components/sx1509/sx1509.cpp +29 -5
  601. esphome/components/sx1509/sx1509.h +9 -1
  602. esphome/components/t6615/t6615.cpp +1 -0
  603. esphome/components/tc74/tc74.cpp +1 -1
  604. esphome/components/tca9548a/tca9548a.cpp +1 -1
  605. esphome/components/tca9555/tca9555.cpp +2 -2
  606. esphome/components/tcs34725/tcs34725.cpp +4 -4
  607. esphome/components/tee501/tee501.cpp +3 -2
  608. esphome/components/tem3200/tem3200.cpp +5 -6
  609. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  610. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  611. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  612. esphome/components/template/cover/template_cover.cpp +1 -1
  613. esphome/components/template/select/template_select.cpp +6 -4
  614. esphome/components/template/text/template_text.cpp +2 -3
  615. esphome/components/template/valve/template_valve.cpp +5 -3
  616. esphome/components/text/__init__.py +10 -11
  617. esphome/components/text/text.cpp +1 -1
  618. esphome/components/text/text.h +0 -4
  619. esphome/components/text_sensor/__init__.py +1 -0
  620. esphome/components/text_sensor/text_sensor.cpp +8 -4
  621. esphome/components/text_sensor/text_sensor.h +6 -6
  622. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  623. esphome/components/time/__init__.py +1 -2
  624. esphome/components/time_based/time_based_cover.cpp +4 -2
  625. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  626. esphome/components/tm1621/tm1621.cpp +3 -3
  627. esphome/components/tm1637/tm1637.cpp +9 -7
  628. esphome/components/tm1638/tm1638.cpp +7 -5
  629. esphome/components/tm1651/tm1651.cpp +2 -2
  630. esphome/components/tmp102/tmp102.cpp +1 -3
  631. esphome/components/tmp102/tmp102.h +0 -3
  632. esphome/components/tmp1075/tmp1075.cpp +12 -9
  633. esphome/components/tmp117/tmp117.cpp +2 -2
  634. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  635. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  636. esphome/components/tsl2561/tsl2561.cpp +7 -5
  637. esphome/components/tsl2591/tsl2591.cpp +25 -27
  638. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  639. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  640. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  641. esphome/components/tuya/select/tuya_select.cpp +5 -3
  642. esphome/components/tx20/tx20.cpp +3 -3
  643. esphome/components/uart/__init__.py +4 -5
  644. esphome/components/uart/button/uart_button.cpp +1 -1
  645. esphome/components/uart/switch/uart_switch.cpp +2 -2
  646. esphome/components/uart/uart.cpp +2 -2
  647. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  648. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  649. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  650. esphome/components/uart/uart_component_host.cpp +11 -8
  651. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  652. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  653. esphome/components/udp/udp_component.cpp +9 -5
  654. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  655. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  656. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  657. esphome/components/update/__init__.py +1 -0
  658. esphome/components/update/update_entity.cpp +1 -1
  659. esphome/components/update/update_entity.h +0 -3
  660. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  661. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  662. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  663. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  664. esphome/components/usb_host/__init__.py +64 -0
  665. esphome/components/usb_host/usb_host.h +116 -0
  666. esphome/components/usb_host/usb_host_client.cpp +394 -0
  667. esphome/components/usb_host/usb_host_component.cpp +35 -0
  668. esphome/components/usb_uart/__init__.py +134 -0
  669. esphome/components/usb_uart/ch34x.cpp +80 -0
  670. esphome/components/usb_uart/cp210x.cpp +126 -0
  671. esphome/components/usb_uart/usb_uart.cpp +328 -0
  672. esphome/components/usb_uart/usb_uart.h +151 -0
  673. esphome/components/valve/__init__.py +1 -0
  674. esphome/components/veml3235/veml3235.cpp +13 -9
  675. esphome/components/veml7700/veml7700.cpp +10 -6
  676. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  677. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  678. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  679. esphome/components/web_server/server_index_v2.h +632 -630
  680. esphome/components/web_server/server_index_v3.h +411 -409
  681. esphome/components/web_server/web_server.cpp +5 -3
  682. esphome/components/web_server_base/web_server_base.cpp +1 -1
  683. esphome/components/web_server_idf/__init__.py +0 -2
  684. esphome/components/web_server_idf/utils.cpp +1 -1
  685. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  686. esphome/components/web_server_idf/web_server_idf.h +7 -0
  687. esphome/components/weikai/__init__.py +2 -0
  688. esphome/components/weikai/weikai.cpp +24 -22
  689. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  690. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  691. esphome/components/wiegand/wiegand.cpp +1 -1
  692. esphome/components/wifi/wifi_component.cpp +50 -37
  693. esphome/components/wifi/wifi_component.h +7 -4
  694. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  695. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  696. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  697. esphome/components/wireguard/wireguard.cpp +21 -21
  698. esphome/components/wl_134/text_sensor.py +1 -2
  699. esphome/components/wled/wled_light_effect.cpp +1 -1
  700. esphome/components/x9c/x9c.cpp +5 -3
  701. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  702. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  703. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  704. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  705. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  706. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  707. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  708. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  709. esphome/components/xl9535/xl9535.cpp +2 -2
  710. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  711. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  712. esphome/config.py +3 -2
  713. esphome/config_validation.py +46 -17
  714. esphome/const.py +10 -1
  715. esphome/core/__init__.py +37 -18
  716. esphome/core/application.cpp +197 -8
  717. esphome/core/application.h +116 -6
  718. esphome/core/component.cpp +36 -15
  719. esphome/core/component.h +43 -13
  720. esphome/core/config.py +12 -0
  721. esphome/core/defines.h +10 -2
  722. esphome/core/entity_base.cpp +4 -16
  723. esphome/core/entity_base.h +27 -13
  724. esphome/core/helpers.cpp +1 -1
  725. esphome/core/helpers.h +5 -5
  726. esphome/core/log.h +2 -0
  727. esphome/core/log_const_en.h +4 -0
  728. esphome/core/scheduler.cpp +2 -2
  729. esphome/coroutine.py +3 -4
  730. esphome/cpp_generator.py +32 -32
  731. esphome/dashboard/core.py +2 -2
  732. esphome/dashboard/web_server.py +2 -2
  733. esphome/git.py +4 -4
  734. esphome/helpers.py +5 -6
  735. esphome/loader.py +8 -7
  736. esphome/log.py +7 -1
  737. esphome/platformio_api.py +2 -3
  738. esphome/storage_json.py +13 -5
  739. esphome/types.py +12 -13
  740. esphome/util.py +1 -2
  741. esphome/wizard.py +0 -16
  742. esphome/writer.py +5 -3
  743. esphome/yaml_util.py +6 -1
  744. esphome/zeroconf.py +1 -1
  745. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  746. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/RECORD +750 -696
  747. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  748. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  749. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  750. {esphome-2025.5.2.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -40,12 +40,12 @@ enum MicrophoneEventGroupBits : uint32_t {
40
40
  };
41
41
 
42
42
  void I2SAudioMicrophone::setup() {
43
- ESP_LOGCONFIG(TAG, "Setting up I2S Audio Microphone...");
43
+ ESP_LOGCONFIG(TAG, "Running setup");
44
44
  #ifdef USE_I2S_LEGACY
45
45
  #if SOC_I2S_SUPPORTS_ADC
46
46
  if (this->adc_) {
47
47
  if (this->parent_->get_port() != I2S_NUM_0) {
48
- ESP_LOGE(TAG, "Internal ADC only works on I2S0!");
48
+ ESP_LOGE(TAG, "Internal ADC only works on I2S0");
49
49
  this->mark_failed();
50
50
  return;
51
51
  }
@@ -55,7 +55,7 @@ void I2SAudioMicrophone::setup() {
55
55
  {
56
56
  if (this->pdm_) {
57
57
  if (this->parent_->get_port() != I2S_NUM_0) {
58
- ESP_LOGE(TAG, "PDM only works on I2S0!");
58
+ ESP_LOGE(TAG, "PDM only works on I2S0");
59
59
  this->mark_failed();
60
60
  return;
61
61
  }
@@ -64,14 +64,14 @@ void I2SAudioMicrophone::setup() {
64
64
 
65
65
  this->active_listeners_semaphore_ = xSemaphoreCreateCounting(MAX_LISTENERS, MAX_LISTENERS);
66
66
  if (this->active_listeners_semaphore_ == nullptr) {
67
- ESP_LOGE(TAG, "Failed to create semaphore");
67
+ ESP_LOGE(TAG, "Creating semaphore failed");
68
68
  this->mark_failed();
69
69
  return;
70
70
  }
71
71
 
72
72
  this->event_group_ = xEventGroupCreate();
73
73
  if (this->event_group_ == nullptr) {
74
- ESP_LOGE(TAG, "Failed to create event group");
74
+ ESP_LOGE(TAG, "Creating event group failed");
75
75
  this->mark_failed();
76
76
  return;
77
77
  }
@@ -79,6 +79,15 @@ void I2SAudioMicrophone::setup() {
79
79
  this->configure_stream_settings_();
80
80
  }
81
81
 
82
+ void I2SAudioMicrophone::dump_config() {
83
+ ESP_LOGCONFIG(TAG,
84
+ "Microphone:\n"
85
+ " Pin: %d\n"
86
+ " PDM: %s\n"
87
+ " DC offset correction: %s",
88
+ static_cast<int8_t>(this->din_pin_), YESNO(this->pdm_), YESNO(this->correct_dc_offset_));
89
+ }
90
+
82
91
  void I2SAudioMicrophone::configure_stream_settings_() {
83
92
  uint8_t channel_count = 1;
84
93
  #ifdef USE_I2S_LEGACY
@@ -127,6 +136,7 @@ bool I2SAudioMicrophone::start_driver_() {
127
136
  if (!this->parent_->try_lock()) {
128
137
  return false; // Waiting for another i2s to return lock
129
138
  }
139
+ this->locked_driver_ = true;
130
140
  esp_err_t err;
131
141
 
132
142
  #ifdef USE_I2S_LEGACY
@@ -151,7 +161,7 @@ bool I2SAudioMicrophone::start_driver_() {
151
161
  config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN);
152
162
  err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
153
163
  if (err != ESP_OK) {
154
- ESP_LOGE(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
164
+ ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
155
165
  return false;
156
166
  }
157
167
 
@@ -174,7 +184,7 @@ bool I2SAudioMicrophone::start_driver_() {
174
184
 
175
185
  err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
176
186
  if (err != ESP_OK) {
177
- ESP_LOGE(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
187
+ ESP_LOGE(TAG, "Error installing driver: %s", esp_err_to_name(err));
178
188
  return false;
179
189
  }
180
190
 
@@ -183,7 +193,7 @@ bool I2SAudioMicrophone::start_driver_() {
183
193
 
184
194
  err = i2s_set_pin(this->parent_->get_port(), &pin_config);
185
195
  if (err != ESP_OK) {
186
- ESP_LOGE(TAG, "Error setting I2S pin: %s", esp_err_to_name(err));
196
+ ESP_LOGE(TAG, "Error setting pin: %s", esp_err_to_name(err));
187
197
  return false;
188
198
  }
189
199
  }
@@ -198,7 +208,7 @@ bool I2SAudioMicrophone::start_driver_() {
198
208
  /* Allocate a new RX channel and get the handle of this channel */
199
209
  err = i2s_new_channel(&chan_cfg, NULL, &this->rx_handle_);
200
210
  if (err != ESP_OK) {
201
- ESP_LOGE(TAG, "Error creating new I2S channel: %s", esp_err_to_name(err));
211
+ ESP_LOGE(TAG, "Error creating channel: %s", esp_err_to_name(err));
202
212
  return false;
203
213
  }
204
214
 
@@ -270,14 +280,14 @@ bool I2SAudioMicrophone::start_driver_() {
270
280
  err = i2s_channel_init_std_mode(this->rx_handle_, &std_cfg);
271
281
  }
272
282
  if (err != ESP_OK) {
273
- ESP_LOGE(TAG, "Error initializing I2S channel: %s", esp_err_to_name(err));
283
+ ESP_LOGE(TAG, "Error initializing channel: %s", esp_err_to_name(err));
274
284
  return false;
275
285
  }
276
286
 
277
287
  /* Before reading data, start the RX channel first */
278
288
  i2s_channel_enable(this->rx_handle_);
279
289
  if (err != ESP_OK) {
280
- ESP_LOGE(TAG, "Error enabling I2S Microphone: %s", esp_err_to_name(err));
290
+ ESP_LOGE(TAG, "Enabling failed: %s", esp_err_to_name(err));
281
291
  return false;
282
292
  }
283
293
  #endif
@@ -304,31 +314,37 @@ void I2SAudioMicrophone::stop_driver_() {
304
314
  if (this->adc_) {
305
315
  err = i2s_adc_disable(this->parent_->get_port());
306
316
  if (err != ESP_OK) {
307
- ESP_LOGW(TAG, "Error disabling ADC - it may not have started: %s", esp_err_to_name(err));
317
+ ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err));
308
318
  }
309
319
  }
310
320
  #endif
311
321
  err = i2s_stop(this->parent_->get_port());
312
322
  if (err != ESP_OK) {
313
- ESP_LOGW(TAG, "Error stopping I2S microphone - it may not have started: %s", esp_err_to_name(err));
323
+ ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
314
324
  }
315
325
  err = i2s_driver_uninstall(this->parent_->get_port());
316
326
  if (err != ESP_OK) {
317
- ESP_LOGW(TAG, "Error uninstalling I2S driver - it may not have started: %s", esp_err_to_name(err));
327
+ ESP_LOGW(TAG, "Error uninstalling driver: %s", esp_err_to_name(err));
318
328
  }
319
329
  #else
320
- /* Have to stop the channel before deleting it */
321
- err = i2s_channel_disable(this->rx_handle_);
322
- if (err != ESP_OK) {
323
- ESP_LOGW(TAG, "Error stopping I2S microphone - it may not have started: %s", esp_err_to_name(err));
324
- }
325
- /* If the handle is not needed any more, delete it to release the channel resources */
326
- err = i2s_del_channel(this->rx_handle_);
327
- if (err != ESP_OK) {
328
- ESP_LOGW(TAG, "Error deleting I2S channel - it may not have started: %s", esp_err_to_name(err));
330
+ if (this->rx_handle_ != nullptr) {
331
+ /* Have to stop the channel before deleting it */
332
+ err = i2s_channel_disable(this->rx_handle_);
333
+ if (err != ESP_OK) {
334
+ ESP_LOGW(TAG, "Error stopping: %s", esp_err_to_name(err));
335
+ }
336
+ /* If the handle is not needed any more, delete it to release the channel resources */
337
+ err = i2s_del_channel(this->rx_handle_);
338
+ if (err != ESP_OK) {
339
+ ESP_LOGW(TAG, "Error deleting channel: %s", esp_err_to_name(err));
340
+ }
341
+ this->rx_handle_ = nullptr;
329
342
  }
330
343
  #endif
331
- this->parent_->unlock();
344
+ if (this->locked_driver_) {
345
+ this->parent_->unlock();
346
+ this->locked_driver_ = false;
347
+ }
332
348
  }
333
349
 
334
350
  void I2SAudioMicrophone::mic_task(void *params) {
@@ -400,7 +416,7 @@ size_t I2SAudioMicrophone::read_(uint8_t *buf, size_t len, TickType_t ticks_to_w
400
416
  // Ignore ESP_ERR_TIMEOUT if ticks_to_wait = 0, as it will read the data on the next call
401
417
  if (!this->status_has_warning()) {
402
418
  // Avoid spamming the logs with the error message if its repeated
403
- ESP_LOGW(TAG, "Error reading from I2S microphone: %s", esp_err_to_name(err));
419
+ ESP_LOGW(TAG, "Read error: %s", esp_err_to_name(err));
404
420
  }
405
421
  this->status_set_warning();
406
422
  return 0;
@@ -428,19 +444,19 @@ void I2SAudioMicrophone::loop() {
428
444
  uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
429
445
 
430
446
  if (event_group_bits & MicrophoneEventGroupBits::TASK_STARTING) {
431
- ESP_LOGD(TAG, "Task started, attempting to allocate buffer");
447
+ ESP_LOGV(TAG, "Task started, attempting to allocate buffer");
432
448
  xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_STARTING);
433
449
  }
434
450
 
435
451
  if (event_group_bits & MicrophoneEventGroupBits::TASK_RUNNING) {
436
- ESP_LOGD(TAG, "Task is running and reading data");
452
+ ESP_LOGV(TAG, "Task is running and reading data");
437
453
 
438
454
  xEventGroupClearBits(this->event_group_, MicrophoneEventGroupBits::TASK_RUNNING);
439
455
  this->state_ = microphone::STATE_RUNNING;
440
456
  }
441
457
 
442
458
  if ((event_group_bits & MicrophoneEventGroupBits::TASK_STOPPED)) {
443
- ESP_LOGD(TAG, "Task finished, freeing resources and uninstalling I2S driver");
459
+ ESP_LOGV(TAG, "Task finished, freeing resources and uninstalling driver");
444
460
 
445
461
  vTaskDelete(this->task_handle_);
446
462
  this->task_handle_ = nullptr;
@@ -470,7 +486,8 @@ void I2SAudioMicrophone::loop() {
470
486
  }
471
487
 
472
488
  if (!this->start_driver_()) {
473
- this->status_momentary_error("I2S driver failed to start, unloading it and attempting again in 1 second", 1000);
489
+ ESP_LOGE(TAG, "Driver failed to start; retrying in 1 second");
490
+ this->status_momentary_error("driver_fail", 1000);
474
491
  this->stop_driver_(); // Stop/frees whatever possibly started
475
492
  break;
476
493
  }
@@ -480,7 +497,8 @@ void I2SAudioMicrophone::loop() {
480
497
  &this->task_handle_);
481
498
 
482
499
  if (this->task_handle_ == nullptr) {
483
- this->status_momentary_error("Task failed to start, attempting again in 1 second", 1000);
500
+ ESP_LOGE(TAG, "Task failed to start, retrying in 1 second");
501
+ this->status_momentary_error("task_fail", 1000);
484
502
  this->stop_driver_(); // Stops the driver to return the lock; will be reloaded in next attempt
485
503
  }
486
504
  }
@@ -18,6 +18,7 @@ namespace i2s_audio {
18
18
  class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, public Component {
19
19
  public:
20
20
  void setup() override;
21
+ void dump_config() override;
21
22
  void start() override;
22
23
  void stop() override;
23
24
 
@@ -80,6 +81,7 @@ class I2SAudioMicrophone : public I2SAudioIn, public microphone::Microphone, pub
80
81
  bool pdm_{false};
81
82
 
82
83
  bool correct_dc_offset_;
84
+ bool locked_driver_{false};
83
85
  int32_t dc_offset_{0};
84
86
  };
85
87
 
@@ -99,7 +99,7 @@ static const std::vector<int16_t> Q15_VOLUME_SCALING_FACTORS = {
99
99
  19508, 20665, 21891, 23189, 24565, 26022, 27566, 29201, 30933, 32767};
100
100
 
101
101
  void I2SAudioSpeaker::setup() {
102
- ESP_LOGCONFIG(TAG, "Setting up I2S Audio Speaker...");
102
+ ESP_LOGCONFIG(TAG, "Running setup");
103
103
 
104
104
  this->event_group_ = xEventGroupCreate();
105
105
 
@@ -110,29 +110,48 @@ void I2SAudioSpeaker::setup() {
110
110
  }
111
111
  }
112
112
 
113
+ void I2SAudioSpeaker::dump_config() {
114
+ ESP_LOGCONFIG(TAG,
115
+ "Speaker:\n"
116
+ " Pin: %d\n"
117
+ " Buffer duration: %" PRIu32,
118
+ static_cast<int8_t>(this->dout_pin_), this->buffer_duration_ms_);
119
+ if (this->timeout_.has_value()) {
120
+ ESP_LOGCONFIG(TAG, " Timeout: %" PRIu32 " ms", this->timeout_.value());
121
+ }
122
+ #ifdef USE_I2S_LEGACY
123
+ #if SOC_I2S_SUPPORTS_DAC
124
+ ESP_LOGCONFIG(TAG, " Internal DAC mode: %d", static_cast<int8_t>(this->internal_dac_mode_));
125
+ #endif
126
+ ESP_LOGCONFIG(TAG, " Communication format: %d", static_cast<int8_t>(this->i2s_comm_fmt_));
127
+ #else
128
+ ESP_LOGCONFIG(TAG, " Communication format: %s", this->i2s_comm_fmt_.c_str());
129
+ #endif
130
+ }
131
+
113
132
  void I2SAudioSpeaker::loop() {
114
133
  uint32_t event_group_bits = xEventGroupGetBits(this->event_group_);
115
134
 
116
135
  if (event_group_bits & SpeakerEventGroupBits::STATE_STARTING) {
117
- ESP_LOGD(TAG, "Starting Speaker");
136
+ ESP_LOGD(TAG, "Starting");
118
137
  this->state_ = speaker::STATE_STARTING;
119
138
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STARTING);
120
139
  }
121
140
  if (event_group_bits & SpeakerEventGroupBits::STATE_RUNNING) {
122
- ESP_LOGD(TAG, "Started Speaker");
141
+ ESP_LOGD(TAG, "Started");
123
142
  this->state_ = speaker::STATE_RUNNING;
124
143
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_RUNNING);
125
144
  this->status_clear_warning();
126
145
  this->status_clear_error();
127
146
  }
128
147
  if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPING) {
129
- ESP_LOGD(TAG, "Stopping Speaker");
148
+ ESP_LOGD(TAG, "Stopping");
130
149
  this->state_ = speaker::STATE_STOPPING;
131
150
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::STATE_STOPPING);
132
151
  }
133
152
  if (event_group_bits & SpeakerEventGroupBits::STATE_STOPPED) {
134
153
  if (!this->task_created_) {
135
- ESP_LOGD(TAG, "Stopped Speaker");
154
+ ESP_LOGD(TAG, "Stopped");
136
155
  this->state_ = speaker::STATE_STOPPED;
137
156
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ALL_BITS);
138
157
  this->speaker_task_handle_ = nullptr;
@@ -140,20 +159,19 @@ void I2SAudioSpeaker::loop() {
140
159
  }
141
160
 
142
161
  if (event_group_bits & SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START) {
143
- this->status_set_error("Failed to start speaker task");
162
+ this->status_set_error("Failed to start task");
144
163
  xEventGroupClearBits(this->event_group_, SpeakerEventGroupBits::ERR_TASK_FAILED_TO_START);
145
164
  }
146
165
 
147
166
  if (event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS) {
148
167
  uint32_t error_bits = event_group_bits & SpeakerEventGroupBits::ALL_ERR_ESP_BITS;
149
- ESP_LOGW(TAG, "Error writing to I2S: %s", esp_err_to_name(err_bit_to_esp_err(error_bits)));
168
+ ESP_LOGW(TAG, "Writing failed: %s", esp_err_to_name(err_bit_to_esp_err(error_bits)));
150
169
  this->status_set_warning();
151
170
  }
152
171
 
153
172
  if (event_group_bits & SpeakerEventGroupBits::ERR_ESP_NOT_SUPPORTED) {
154
- this->status_set_error("Failed to adjust I2S bus to match the incoming audio");
155
- ESP_LOGE(TAG,
156
- "Incompatible audio format: sample rate = %" PRIu32 ", channels = %" PRIu8 ", bits per sample = %" PRIu8,
173
+ this->status_set_error("Failed to adjust bus to match incoming audio");
174
+ ESP_LOGE(TAG, "Incompatible audio format: sample rate = %" PRIu32 ", channels = %u, bits per sample = %u",
157
175
  this->audio_stream_info_.get_sample_rate(), this->audio_stream_info_.get_channels(),
158
176
  this->audio_stream_info_.get_bits_per_sample());
159
177
  }
@@ -202,7 +220,7 @@ void I2SAudioSpeaker::set_mute_state(bool mute_state) {
202
220
 
203
221
  size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length, TickType_t ticks_to_wait) {
204
222
  if (this->is_failed()) {
205
- ESP_LOGE(TAG, "Cannot play audio, speaker failed to setup");
223
+ ESP_LOGE(TAG, "Setup failed; cannot play audio");
206
224
  return 0;
207
225
  }
208
226
  if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) {
@@ -24,6 +24,7 @@ class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Comp
24
24
  float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
25
25
 
26
26
  void setup() override;
27
+ void dump_config() override;
27
28
  void loop() override;
28
29
 
29
30
  void set_buffer_duration(uint32_t buffer_duration_ms) { this->buffer_duration_ms_ = buffer_duration_ms; }
@@ -1,7 +1,7 @@
1
1
  #include "iaqcore.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
6
  namespace esphome {
7
7
  namespace iaqcore {
@@ -26,7 +26,7 @@ struct SensorData {
26
26
 
27
27
  void IAQCore::setup() {
28
28
  if (this->write(nullptr, 0) != i2c::ERROR_OK) {
29
- ESP_LOGD(TAG, "Communication failed!");
29
+ ESP_LOGD(TAG, ESP_LOG_MSG_COMM_FAIL);
30
30
  this->mark_failed();
31
31
  return;
32
32
  }
@@ -89,7 +89,7 @@ void IAQCore::dump_config() {
89
89
  LOG_I2C_DEVICE(this);
90
90
  LOG_UPDATE_INTERVAL(this);
91
91
  if (this->is_failed()) {
92
- ESP_LOGE(TAG, "Communication with AMS iAQ Core failed!");
92
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
93
93
  }
94
94
  LOG_SENSOR(" ", "CO2", this->co2_);
95
95
  LOG_SENSOR(" ", "TVOC", this->tvoc_);
@@ -89,8 +89,10 @@ void ILI9XXXDisplay::setup_pins_() {
89
89
 
90
90
  void ILI9XXXDisplay::dump_config() {
91
91
  LOG_DISPLAY("", "ili9xxx", this);
92
- ESP_LOGCONFIG(TAG, " Width Offset: %u", this->offset_x_);
93
- ESP_LOGCONFIG(TAG, " Height Offset: %u", this->offset_y_);
92
+ ESP_LOGCONFIG(TAG,
93
+ " Width Offset: %u\n"
94
+ " Height Offset: %u",
95
+ this->offset_x_, this->offset_y_);
94
96
  switch (this->buffer_color_mode_) {
95
97
  case BITS_8_INDEXED:
96
98
  ESP_LOGCONFIG(TAG, " Color mode: 8bit Indexed");
@@ -111,11 +113,14 @@ void ILI9XXXDisplay::dump_config() {
111
113
  LOG_PIN(" CS Pin: ", this->cs_);
112
114
  LOG_PIN(" DC Pin: ", this->dc_pin_);
113
115
  LOG_PIN(" Busy Pin: ", this->busy_pin_);
114
- ESP_LOGCONFIG(TAG, " Color order: %s", this->color_order_ == display::COLOR_ORDER_BGR ? "BGR" : "RGB");
115
- ESP_LOGCONFIG(TAG, " Swap_xy: %s", YESNO(this->swap_xy_));
116
- ESP_LOGCONFIG(TAG, " Mirror_x: %s", YESNO(this->mirror_x_));
117
- ESP_LOGCONFIG(TAG, " Mirror_y: %s", YESNO(this->mirror_y_));
118
- ESP_LOGCONFIG(TAG, " Invert colors: %s", YESNO(this->pre_invertcolors_));
116
+ ESP_LOGCONFIG(TAG,
117
+ " Color order: %s\n"
118
+ " Swap_xy: %s\n"
119
+ " Mirror_x: %s\n"
120
+ " Mirror_y: %s\n"
121
+ " Invert colors: %s",
122
+ this->color_order_ == display::COLOR_ORDER_BGR ? "BGR" : "RGB", YESNO(this->swap_xy_),
123
+ YESNO(this->mirror_x_), YESNO(this->mirror_y_), YESNO(this->pre_invertcolors_));
119
124
 
120
125
  if (this->is_failed()) {
121
126
  ESP_LOGCONFIG(TAG, " => Failed to init Memory: YES!");
@@ -89,7 +89,7 @@ class ILI9XXXDisplay : public display::DisplayBuffer,
89
89
 
90
90
  void dump_config() override;
91
91
  void setup() override;
92
- void on_shutdown() override { this->command(ILI9XXX_SLPIN); }
92
+ void on_powerdown() override { this->command(ILI9XXX_SLPIN); }
93
93
 
94
94
  display::DisplayType get_display_type() override { return display::DisplayType::DISPLAY_TYPE_COLOR; }
95
95
  void draw_pixels_at(int x_start, int y_start, int w, int h, const uint8_t *ptr, display::ColorOrder order,
@@ -1,6 +1,7 @@
1
1
  #include "image.h"
2
2
 
3
3
  #include "esphome/core/hal.h"
4
+ #include "esphome/core/helpers.h"
4
5
 
5
6
  namespace esphome {
6
7
  namespace image {
@@ -34,7 +34,7 @@ static const uint8_t INA219_REGISTER_CURRENT = 0x04;
34
34
  static const uint8_t INA219_REGISTER_CALIBRATION = 0x05;
35
35
 
36
36
  void INA219Component::setup() {
37
- ESP_LOGCONFIG(TAG, "Setting up INA219...");
37
+ ESP_LOGCONFIG(TAG, "Running setup");
38
38
  // Config Register
39
39
  // 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
40
40
  if (!this->write_byte_16(INA219_REGISTER_CONFIG, 0x8000)) {
@@ -134,7 +134,7 @@ void INA219Component::dump_config() {
134
134
  LOG_I2C_DEVICE(this);
135
135
 
136
136
  if (this->is_failed()) {
137
- ESP_LOGE(TAG, "Communication with INA219 failed!");
137
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
138
138
  return;
139
139
  }
140
140
  LOG_UPDATE_INTERVAL(this);
@@ -37,7 +37,7 @@ static const uint16_t INA226_ADC_TIMES[] = {140, 204, 332, 588, 1100, 2116, 4156
37
37
  static const uint16_t INA226_ADC_AVG_SAMPLES[] = {1, 4, 16, 64, 128, 256, 512, 1024};
38
38
 
39
39
  void INA226Component::setup() {
40
- ESP_LOGCONFIG(TAG, "Setting up INA226...");
40
+ ESP_LOGCONFIG(TAG, "Running setup");
41
41
 
42
42
  ConfigurationRegister config;
43
43
 
@@ -88,14 +88,17 @@ void INA226Component::dump_config() {
88
88
  LOG_I2C_DEVICE(this);
89
89
 
90
90
  if (this->is_failed()) {
91
- ESP_LOGE(TAG, "Communication with INA226 failed!");
91
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
92
92
  return;
93
93
  }
94
94
  LOG_UPDATE_INTERVAL(this);
95
95
 
96
- ESP_LOGCONFIG(TAG, " ADC Conversion Time Bus Voltage: %d", INA226_ADC_TIMES[this->adc_time_voltage_ & 0b111]);
97
- ESP_LOGCONFIG(TAG, " ADC Conversion Time Shunt Voltage: %d", INA226_ADC_TIMES[this->adc_time_current_ & 0b111]);
98
- ESP_LOGCONFIG(TAG, " ADC Averaging Samples: %d", INA226_ADC_AVG_SAMPLES[this->adc_avg_samples_ & 0b111]);
96
+ ESP_LOGCONFIG(TAG,
97
+ " ADC Conversion Time Bus Voltage: %d\n"
98
+ " ADC Conversion Time Shunt Voltage: %d\n"
99
+ " ADC Averaging Samples: %d",
100
+ INA226_ADC_TIMES[this->adc_time_voltage_ & 0b111], INA226_ADC_TIMES[this->adc_time_current_ & 0b111],
101
+ INA226_ADC_AVG_SAMPLES[this->adc_avg_samples_ & 0b111]);
99
102
 
100
103
  LOG_SENSOR(" ", "Bus Voltage", this->bus_voltage_sensor_);
101
104
  LOG_SENSOR(" ", "Shunt Voltage", this->shunt_voltage_sensor_);
@@ -35,7 +35,7 @@ static const uint8_t INA260_REGISTER_MANUFACTURE_ID = 0xFE;
35
35
  static const uint8_t INA260_REGISTER_DEVICE_ID = 0xFF;
36
36
 
37
37
  void INA260Component::setup() {
38
- ESP_LOGCONFIG(TAG, "Setting up INA260...");
38
+ ESP_LOGCONFIG(TAG, "Running setup");
39
39
 
40
40
  // Reset device on setup
41
41
  if (!this->write_byte_16(INA260_REGISTER_CONFIG, 0x8000)) {
@@ -1,7 +1,7 @@
1
1
  #include "ina2xx_base.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/hal.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
  #include <cinttypes>
6
6
  #include <cmath>
7
7
 
@@ -50,7 +50,7 @@ static bool check_model_and_device_match(INAModel model, uint16_t dev_id) {
50
50
  }
51
51
 
52
52
  void INA2XX::setup() {
53
- ESP_LOGCONFIG(TAG, "Setting up INA2xx...");
53
+ ESP_LOGCONFIG(TAG, "Running setup");
54
54
 
55
55
  if (!this->reset_config_()) {
56
56
  ESP_LOGE(TAG, "Reset failed, check connection");
@@ -203,15 +203,19 @@ void INA2XX::dump_config() {
203
203
  this->dev_id_);
204
204
  }
205
205
  if (this->is_failed()) {
206
- ESP_LOGE(TAG, "Communication with INA2xx failed!");
206
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
207
207
  }
208
208
  LOG_UPDATE_INTERVAL(this);
209
- ESP_LOGCONFIG(TAG, " Shunt resistance = %f Ohm", this->shunt_resistance_ohm_);
210
- ESP_LOGCONFIG(TAG, " Max current = %f A", this->max_current_a_);
211
- ESP_LOGCONFIG(TAG, " Shunt temp coeff = %d ppm/°C", this->shunt_tempco_ppm_c_);
212
- ESP_LOGCONFIG(TAG, " ADCRANGE = %d (%s)", (uint8_t) this->adc_range_, this->adc_range_ ? "±40.96 mV" : "±163.84 mV");
213
- ESP_LOGCONFIG(TAG, " CURRENT_LSB = %f", this->current_lsb_);
214
- ESP_LOGCONFIG(TAG, " SHUNT_CAL = %d", this->shunt_cal_);
209
+ ESP_LOGCONFIG(TAG,
210
+ " Shunt resistance = %f Ohm\n"
211
+ " Max current = %f A\n"
212
+ " Shunt temp coeff = %d ppm/°C\n"
213
+ " ADCRANGE = %d (%s)\n"
214
+ " CURRENT_LSB = %f\n"
215
+ " SHUNT_CAL = %d",
216
+ this->shunt_resistance_ohm_, this->max_current_a_, this->shunt_tempco_ppm_c_,
217
+ (uint8_t) this->adc_range_, this->adc_range_ ? "±40.96 mV" : "±163.84 mV", this->current_lsb_,
218
+ this->shunt_cal_);
215
219
 
216
220
  ESP_LOGCONFIG(TAG, " ADC Samples = %d; ADC times: Bus = %d μs, Shunt = %d μs, Temp = %d μs",
217
221
  ADC_SAMPLES[0b111 & (uint8_t) this->adc_avg_samples_],
@@ -22,7 +22,7 @@ static const uint8_t INA3221_REGISTER_CHANNEL3_BUS_VOLTAGE = 0x06;
22
22
  // A0 = SCL -> 0x43
23
23
 
24
24
  void INA3221Component::setup() {
25
- ESP_LOGCONFIG(TAG, "Setting up INA3221...");
25
+ ESP_LOGCONFIG(TAG, "Running setup");
26
26
  // Config Register
27
27
  // 0bx000000000000000 << 15 RESET Bit (1 -> trigger reset)
28
28
  if (!this->write_byte_16(INA3221_REGISTER_CONFIG, 0x8000)) {
@@ -60,7 +60,7 @@ void INA3221Component::dump_config() {
60
60
  ESP_LOGCONFIG(TAG, "INA3221:");
61
61
  LOG_I2C_DEVICE(this);
62
62
  if (this->is_failed()) {
63
- ESP_LOGE(TAG, "Communication with INA3221 failed!");
63
+ ESP_LOGE(TAG, ESP_LOG_MSG_COMM_FAIL);
64
64
  }
65
65
  LOG_UPDATE_INTERVAL(this);
66
66
 
@@ -6,9 +6,12 @@ from esphome.const import (
6
6
  CONF_FULL_UPDATE_EVERY,
7
7
  CONF_ID,
8
8
  CONF_LAMBDA,
9
+ CONF_MIRROR_X,
10
+ CONF_MIRROR_Y,
9
11
  CONF_MODEL,
10
12
  CONF_OE_PIN,
11
13
  CONF_PAGES,
14
+ CONF_TRANSFORM,
12
15
  CONF_WAKEUP_PIN,
13
16
  )
14
17
 
@@ -36,7 +39,6 @@ CONF_SPH_PIN = "sph_pin"
36
39
  CONF_SPV_PIN = "spv_pin"
37
40
  CONF_VCOM_PIN = "vcom_pin"
38
41
 
39
-
40
42
  inkplate6_ns = cg.esphome_ns.namespace("inkplate6")
41
43
  Inkplate6 = inkplate6_ns.class_(
42
44
  "Inkplate6",
@@ -62,6 +64,12 @@ CONFIG_SCHEMA = cv.All(
62
64
  {
63
65
  cv.GenerateID(): cv.declare_id(Inkplate6),
64
66
  cv.Optional(CONF_GREYSCALE, default=False): cv.boolean,
67
+ cv.Optional(CONF_TRANSFORM): cv.Schema(
68
+ {
69
+ cv.Optional(CONF_MIRROR_X, default=False): cv.boolean,
70
+ cv.Optional(CONF_MIRROR_Y, default=False): cv.boolean,
71
+ }
72
+ ),
65
73
  cv.Optional(CONF_PARTIAL_UPDATING, default=True): cv.boolean,
66
74
  cv.Optional(CONF_FULL_UPDATE_EVERY, default=10): cv.uint32_t,
67
75
  cv.Optional(CONF_MODEL, default="inkplate_6"): cv.enum(
@@ -109,7 +117,6 @@ CONFIG_SCHEMA = cv.All(
109
117
  .extend(cv.polling_component_schema("5s"))
110
118
  .extend(i2c.i2c_device_schema(0x48)),
111
119
  cv.has_at_most_one_key(CONF_PAGES, CONF_LAMBDA),
112
- cv.only_with_arduino,
113
120
  )
114
121
 
115
122
 
@@ -126,6 +133,9 @@ async def to_code(config):
126
133
  cg.add(var.set_writer(lambda_))
127
134
 
128
135
  cg.add(var.set_greyscale(config[CONF_GREYSCALE]))
136
+ if transform := config.get(CONF_TRANSFORM):
137
+ cg.add(var.set_mirror_x(transform[CONF_MIRROR_X]))
138
+ cg.add(var.set_mirror_y(transform[CONF_MIRROR_Y]))
129
139
  cg.add(var.set_partial_updating(config[CONF_PARTIAL_UPDATING]))
130
140
  cg.add(var.set_full_update_every(config[CONF_FULL_UPDATE_EVERY]))
131
141
 
@@ -1,11 +1,9 @@
1
1
  #include "inkplate.h"
2
- #include "esphome/core/log.h"
3
2
  #include "esphome/core/application.h"
4
3
  #include "esphome/core/helpers.h"
4
+ #include "esphome/core/log.h"
5
5
 
6
- #ifdef USE_ESP32_FRAMEWORK_ARDUINO
7
-
8
- #include <esp32-hal-gpio.h>
6
+ #include <hal/gpio_hal.h>
9
7
 
10
8
  namespace esphome {
11
9
  namespace inkplate6 {
@@ -156,6 +154,12 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) {
156
154
  if (x >= this->get_width_internal() || y >= this->get_height_internal() || x < 0 || y < 0)
157
155
  return;
158
156
 
157
+ if (this->mirror_y_)
158
+ y = this->get_height_internal() - y - 1;
159
+
160
+ if (this->mirror_x_)
161
+ x = this->get_width_internal() - x - 1;
162
+
159
163
  if (this->greyscale_) {
160
164
  int x1 = x / 2;
161
165
  int x_sub = x % 2;
@@ -180,9 +184,11 @@ void HOT Inkplate6::draw_absolute_pixel_internal(int x, int y, Color color) {
180
184
 
181
185
  void Inkplate6::dump_config() {
182
186
  LOG_DISPLAY("", "Inkplate", this);
183
- ESP_LOGCONFIG(TAG, " Greyscale: %s", YESNO(this->greyscale_));
184
- ESP_LOGCONFIG(TAG, " Partial Updating: %s", YESNO(this->partial_updating_));
185
- ESP_LOGCONFIG(TAG, " Full Update Every: %d", this->full_update_every_);
187
+ ESP_LOGCONFIG(TAG,
188
+ " Greyscale: %s\n"
189
+ " Partial Updating: %s\n"
190
+ " Full Update Every: %d",
191
+ YESNO(this->greyscale_), YESNO(this->partial_updating_), this->full_update_every_);
186
192
  // Log pins
187
193
  LOG_PIN(" CKV Pin: ", this->ckv_pin_);
188
194
  LOG_PIN(" CL Pin: ", this->cl_pin_);
@@ -715,5 +721,3 @@ void Inkplate6::pins_as_outputs_() {
715
721
 
716
722
  } // namespace inkplate6
717
723
  } // namespace esphome
718
-
719
- #endif // USE_ESP32_FRAMEWORK_ARDUINO