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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (753) hide show
  1. esphome/__main__.py +20 -14
  2. esphome/components/a4988/a4988.cpp +1 -1
  3. esphome/components/absolute_humidity/absolute_humidity.cpp +6 -4
  4. esphome/components/ac_dimmer/ac_dimmer.cpp +4 -2
  5. esphome/components/adc/adc_sensor_esp32.cpp +5 -3
  6. esphome/components/adc/adc_sensor_esp8266.cpp +5 -3
  7. esphome/components/adc/adc_sensor_libretiny.cpp +5 -3
  8. esphome/components/adc/adc_sensor_rp2040.cpp +5 -3
  9. esphome/components/adc128s102/adc128s102.cpp +1 -1
  10. esphome/components/ade7880/ade7880.cpp +28 -17
  11. esphome/components/ade7953_base/ade7953_base.cpp +12 -9
  12. esphome/components/ade7953_i2c/ade7953_i2c.cpp +1 -1
  13. esphome/components/ade7953_spi/ade7953_spi.cpp +1 -1
  14. esphome/components/ads1115/ads1115.cpp +3 -5
  15. esphome/components/ads1118/ads1118.cpp +2 -1
  16. esphome/components/ags10/ags10.cpp +3 -2
  17. esphome/components/aht10/aht10.cpp +27 -29
  18. esphome/components/aic3204/aic3204.cpp +2 -2
  19. esphome/components/alarm_control_panel/__init__.py +1 -0
  20. esphome/components/am2315c/am2315c.cpp +2 -2
  21. esphome/components/am2320/am2320.cpp +2 -2
  22. esphome/components/am43/am43_base.h +1 -1
  23. esphome/components/am43/cover/am43_cover.cpp +4 -2
  24. esphome/components/analog_threshold/analog_threshold_binary_sensor.cpp +4 -2
  25. esphome/components/apds9306/apds9306.cpp +8 -5
  26. esphome/components/apds9960/apds9960.cpp +2 -2
  27. esphome/components/api/__init__.py +5 -0
  28. esphome/components/api/api_connection.cpp +753 -379
  29. esphome/components/api/api_connection.h +341 -283
  30. esphome/components/api/api_frame_helper.cpp +349 -344
  31. esphome/components/api/api_frame_helper.h +121 -94
  32. esphome/components/api/api_pb2.cpp +5 -0
  33. esphome/components/api/api_pb2.h +703 -227
  34. esphome/components/api/api_pb2_service.cpp +12 -688
  35. esphome/components/api/api_pb2_service.h +53 -207
  36. esphome/components/api/api_server.cpp +71 -29
  37. esphome/components/api/api_server.h +9 -0
  38. esphome/components/api/client.py +5 -4
  39. esphome/components/api/homeassistant_service.h +1 -1
  40. esphome/components/api/list_entities.cpp +1 -1
  41. esphome/components/api/proto.cpp +1 -0
  42. esphome/components/api/proto.h +5 -4
  43. esphome/components/api/subscribe_state.cpp +8 -16
  44. esphome/components/as3935/as3935.cpp +3 -3
  45. esphome/components/as5600/as5600.cpp +9 -7
  46. esphome/components/as7341/as7341.cpp +7 -5
  47. esphome/components/at581x/at581x.cpp +13 -10
  48. esphome/components/atm90e26/atm90e26.cpp +2 -2
  49. esphome/components/atm90e32/atm90e32.cpp +3 -3
  50. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +5 -3
  51. esphome/components/bang_bang/bang_bang_climate.cpp +8 -5
  52. esphome/components/bedjet/bedjet_hub.cpp +6 -4
  53. esphome/components/beken_spi_led_strip/led_strip.cpp +11 -7
  54. esphome/components/bh1750/bh1750.cpp +2 -2
  55. esphome/components/binary_sensor/__init__.py +1 -0
  56. esphome/components/binary_sensor/automation.cpp +1 -2
  57. esphome/components/bl0906/bl0906.cpp +1 -1
  58. esphome/components/bl0942/bl0942.cpp +11 -8
  59. esphome/components/bl0942/sensor.py +1 -1
  60. esphome/components/ble_client/__init__.py +5 -1
  61. esphome/components/ble_client/output/ble_binary_output.cpp +6 -3
  62. esphome/components/ble_client/sensor/ble_sensor.cpp +9 -6
  63. esphome/components/ble_client/text_sensor/ble_text_sensor.cpp +8 -5
  64. esphome/components/bluetooth_proxy/__init__.py +5 -1
  65. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +5 -5
  66. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +18 -16
  67. esphome/components/bluetooth_proxy/bluetooth_proxy.h +1 -1
  68. esphome/components/bme280_base/bme280_base.cpp +5 -6
  69. esphome/components/bme680/bme680.cpp +3 -3
  70. esphome/components/bme680/sensor.py +2 -2
  71. esphome/components/bme680_bsec/bme680_bsec.cpp +11 -7
  72. esphome/components/bme680_bsec/sensor.py +7 -3
  73. esphome/components/bme68x_bsec2/__init__.py +6 -5
  74. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +17 -13
  75. esphome/components/bme68x_bsec2/sensor.py +4 -4
  76. esphome/components/bme68x_bsec2_i2c/bme68x_bsec2_i2c.cpp +1 -0
  77. esphome/components/bmi160/bmi160.cpp +11 -11
  78. esphome/components/bmp085/bmp085.cpp +2 -2
  79. esphome/components/bmp280_base/bmp280_base.cpp +3 -3
  80. esphome/components/bmp3xx_base/bmp3xx_base.cpp +13 -13
  81. esphome/components/bmp581/bmp581.cpp +33 -27
  82. esphome/components/bp1658cj/bp1658cj.cpp +5 -3
  83. esphome/components/bp5758d/bp5758d.cpp +1 -1
  84. esphome/components/button/__init__.py +1 -0
  85. esphome/components/canbus/canbus.cpp +1 -1
  86. esphome/components/cap1188/cap1188.cpp +6 -4
  87. esphome/components/captive_portal/captive_portal.cpp +1 -1
  88. esphome/components/ccs811/ccs811.cpp +3 -2
  89. esphome/components/cd74hc4067/cd74hc4067.cpp +1 -1
  90. esphome/components/ch422g/ch422g.cpp +2 -2
  91. esphome/components/chsc6x/chsc6x_touchscreen.cpp +6 -4
  92. esphome/components/climate/__init__.py +1 -0
  93. esphome/components/climate/climate.cpp +12 -7
  94. esphome/components/climate/climate.h +1 -1
  95. esphome/components/climate_ir/climate_ir.cpp +7 -4
  96. esphome/components/cm1106/__init__.py +1 -0
  97. esphome/components/cm1106/cm1106.cpp +112 -0
  98. esphome/components/cm1106/cm1106.h +40 -0
  99. esphome/components/cm1106/sensor.py +72 -0
  100. esphome/components/const/__init__.py +1 -0
  101. esphome/components/cover/__init__.py +1 -0
  102. esphome/components/cs5460a/cs5460a.cpp +16 -11
  103. esphome/components/cse7761/cse7761.cpp +2 -2
  104. esphome/components/cse7766/cse7766.cpp +0 -5
  105. esphome/components/cse7766/cse7766.h +5 -1
  106. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +1 -1
  107. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +6 -3
  108. esphome/components/current_based/current_based_cover.cpp +4 -2
  109. esphome/components/dac7678/dac7678_output.cpp +4 -4
  110. esphome/components/dallas_temp/dallas_temp.cpp +2 -3
  111. esphome/components/daly_bms/daly_bms.cpp +2 -1
  112. esphome/components/dashboard_import/__init__.py +1 -2
  113. esphome/components/datetime/__init__.py +3 -1
  114. esphome/components/datetime/date_entity.cpp +5 -5
  115. esphome/components/datetime/datetime_base.h +0 -5
  116. esphome/components/datetime/datetime_entity.cpp +8 -8
  117. esphome/components/datetime/time_entity.cpp +4 -4
  118. esphome/components/debug/debug_component.cpp +1 -5
  119. esphome/components/debug/debug_component.h +1 -1
  120. esphome/components/debug/debug_esp32.cpp +4 -2
  121. esphome/components/deep_sleep/deep_sleep_component.cpp +11 -5
  122. esphome/components/deep_sleep/deep_sleep_esp32.cpp +7 -5
  123. esphome/components/demo/__init__.py +206 -0
  124. esphome/components/demo/demo_alarm_control_panel.h +65 -0
  125. esphome/components/demo/demo_button.h +15 -0
  126. esphome/components/demo/demo_date.h +34 -0
  127. esphome/components/demo/demo_datetime.h +40 -0
  128. esphome/components/demo/demo_lock.h +17 -0
  129. esphome/components/demo/demo_select.h +15 -0
  130. esphome/components/demo/demo_text.h +18 -0
  131. esphome/components/demo/demo_time.h +34 -0
  132. esphome/components/demo/demo_valve.h +54 -0
  133. esphome/components/dfrobot_sen0395/commands.cpp +3 -3
  134. esphome/components/dht/dht.cpp +29 -50
  135. esphome/components/dht12/dht12.cpp +2 -2
  136. esphome/components/display/display.h +5 -3
  137. esphome/components/dps310/dps310.cpp +7 -5
  138. esphome/components/ds1307/ds1307.cpp +2 -2
  139. esphome/components/dsmr/dsmr.cpp +5 -3
  140. esphome/components/duty_cycle/duty_cycle_sensor.cpp +2 -2
  141. esphome/components/duty_time/duty_time_sensor.cpp +5 -3
  142. esphome/components/ee895/ee895.cpp +3 -3
  143. esphome/components/ektf2232/touchscreen/ektf2232.cpp +1 -1
  144. esphome/components/emc2101/emc2101.cpp +11 -9
  145. esphome/components/ens160_base/ens160_base.cpp +2 -2
  146. esphome/components/ens210/ens210.cpp +2 -2
  147. esphome/components/es7210/es7210.cpp +6 -4
  148. esphome/components/es7243e/es7243e.cpp +1 -1
  149. esphome/components/es8156/es8156.cpp +1 -1
  150. esphome/components/es8311/es8311.cpp +8 -6
  151. esphome/components/es8388/__init__.py +0 -0
  152. esphome/components/es8388/audio_dac.py +26 -0
  153. esphome/components/es8388/es8388.cpp +289 -0
  154. esphome/components/es8388/es8388.h +81 -0
  155. esphome/components/es8388/es8388_const.h +83 -0
  156. esphome/components/es8388/select/__init__.py +47 -0
  157. esphome/components/es8388/select/adc_input_mic_select.cpp +12 -0
  158. esphome/components/es8388/select/adc_input_mic_select.h +15 -0
  159. esphome/components/es8388/select/dac_output_select.cpp +12 -0
  160. esphome/components/es8388/select/dac_output_select.h +15 -0
  161. esphome/components/esp32/__init__.py +118 -23
  162. esphome/components/esp32/boards.py +208 -125
  163. esphome/components/esp32/const.py +6 -0
  164. esphome/components/esp32/gpio.py +14 -1
  165. esphome/components/esp32/gpio_esp32_c5.py +45 -0
  166. esphome/components/esp32/gpio_esp32_p4.py +43 -0
  167. esphome/components/esp32/preferences.cpp +7 -7
  168. esphome/components/esp32_ble/__init__.py +115 -0
  169. esphome/components/esp32_ble/ble.cpp +101 -54
  170. esphome/components/esp32_ble/ble.h +24 -5
  171. esphome/components/esp32_ble/ble_event.h +172 -32
  172. esphome/components/esp32_ble/ble_scan_result.h +24 -0
  173. esphome/components/esp32_ble/ble_uuid.h +1 -1
  174. esphome/components/esp32_ble/queue.h +53 -27
  175. esphome/components/esp32_ble_client/ble_client_base.cpp +4 -2
  176. esphome/components/esp32_ble_server/__init__.py +4 -1
  177. esphome/components/esp32_ble_server/ble_characteristic.cpp +1 -0
  178. esphome/components/esp32_ble_server/ble_server.h +0 -1
  179. esphome/components/esp32_ble_tracker/__init__.py +7 -2
  180. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +107 -75
  181. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +16 -16
  182. esphome/components/esp32_camera/esp32_camera.cpp +35 -27
  183. esphome/components/esp32_camera_web_server/camera_web_server.cpp +4 -2
  184. esphome/components/esp32_dac/esp32_dac.cpp +2 -2
  185. esphome/components/esp32_improv/__init__.py +5 -1
  186. esphome/components/esp32_improv/esp32_improv_component.cpp +2 -2
  187. esphome/components/esp32_rmt_led_strip/led_strip.cpp +11 -7
  188. esphome/components/esp32_rmt_led_strip/light.py +5 -1
  189. esphome/components/esp32_touch/esp32_touch.cpp +12 -8
  190. esphome/components/esp8266/gpio.cpp +10 -1
  191. esphome/components/esp8266/preferences.cpp +6 -6
  192. esphome/components/esp8266_pwm/esp8266_pwm.cpp +3 -3
  193. esphome/components/esp_ldo/__init__.py +91 -0
  194. esphome/components/esp_ldo/esp_ldo.cpp +43 -0
  195. esphome/components/esp_ldo/esp_ldo.h +43 -0
  196. esphome/components/esphome/ota/ota_esphome.cpp +15 -8
  197. esphome/components/ethernet/ethernet_component.cpp +38 -26
  198. esphome/components/ethernet/ethernet_component.h +1 -1
  199. esphome/components/event/__init__.py +1 -0
  200. esphome/components/exposure_notifications/exposure_notifications.cpp +1 -1
  201. esphome/components/ezo/ezo.cpp +1 -1
  202. esphome/components/ezo_pmp/ezo_pmp.cpp +1 -1
  203. esphome/components/factory_reset/button/factory_reset_button.cpp +1 -1
  204. esphome/components/factory_reset/switch/factory_reset_switch.cpp +1 -1
  205. esphome/components/fan/__init__.py +1 -0
  206. esphome/components/fan/fan.cpp +30 -19
  207. esphome/components/fastled_base/fastled_light.cpp +7 -5
  208. esphome/components/fingerprint_grow/fingerprint_grow.cpp +8 -6
  209. esphome/components/fs3000/fs3000.cpp +1 -1
  210. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +7 -4
  211. esphome/components/ft63x6/ft63x6.cpp +5 -3
  212. esphome/components/gcja5/gcja5.cpp +0 -12
  213. esphome/components/gcja5/gcja5.h +8 -3
  214. esphome/components/gdk101/gdk101.cpp +2 -2
  215. esphome/components/globals/globals_component.h +13 -10
  216. esphome/components/gp2y1010au0f/gp2y1010au0f.cpp +4 -2
  217. esphome/components/gp8403/gp8403.cpp +4 -2
  218. esphome/components/gp8403/output/gp8403_output.cpp +4 -2
  219. esphome/components/gpio/one_wire/gpio_one_wire.cpp +2 -2
  220. esphome/components/gpio/output/gpio_binary_output.cpp +1 -1
  221. esphome/components/gpio/switch/gpio_switch.cpp +1 -1
  222. esphome/components/graphical_display_menu/graphical_display_menu.cpp +12 -8
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +5 -6
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +1 -1
  225. esphome/components/grove_tb6612fng/grove_tb6612fng.h +1 -1
  226. esphome/components/growatt_solar/growatt_solar.cpp +6 -3
  227. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +1 -1
  228. esphome/components/haier/haier_base.cpp +2 -2
  229. esphome/components/haier/hon_climate.cpp +13 -6
  230. esphome/components/havells_solar/havells_solar.cpp +5 -2
  231. esphome/components/hbridge/switch/hbridge_switch.cpp +1 -1
  232. esphome/components/hdc1080/hdc1080.cpp +2 -2
  233. esphome/components/he60r/he60r.cpp +4 -2
  234. esphome/components/hlw8012/hlw8012.cpp +6 -4
  235. esphome/components/hm3301/hm3301.cpp +2 -2
  236. esphome/components/hmc5883l/hmc5883l.cpp +2 -2
  237. esphome/components/homeassistant/time/homeassistant_time.cpp +4 -2
  238. esphome/components/honeywell_hih_i2c/honeywell_hih.cpp +4 -4
  239. esphome/components/honeywellabp/honeywellabp.cpp +4 -2
  240. esphome/components/honeywellabp2_i2c/honeywellabp2.cpp +8 -6
  241. esphome/components/hte501/hte501.cpp +3 -2
  242. esphome/components/http_request/__init__.py +2 -2
  243. esphome/components/http_request/http_request.cpp +7 -5
  244. esphome/components/http_request/http_request_idf.cpp +4 -2
  245. esphome/components/http_request/ota/ota_http_request.cpp +1 -1
  246. esphome/components/htu21d/htu21d.cpp +2 -2
  247. esphome/components/htu31d/htu31d.cpp +2 -2
  248. esphome/components/hx711/hx711.cpp +2 -2
  249. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +5 -3
  250. esphome/components/hyt271/hyt271.cpp +2 -2
  251. esphome/components/i2c/i2c_bus_arduino.cpp +14 -11
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +13 -11
  253. esphome/components/i2s_audio/__init__.py +2 -0
  254. esphome/components/i2s_audio/i2s_audio.cpp +3 -4
  255. esphome/components/i2s_audio/i2s_audio.h +1 -1
  256. esphome/components/i2s_audio/media_player/__init__.py +1 -1
  257. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +5 -3
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +85 -77
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +6 -0
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +29 -11
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +1 -0
  262. esphome/components/iaqcore/iaqcore.cpp +3 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +12 -7
  264. esphome/components/ili9xxx/ili9xxx_display.h +1 -1
  265. esphome/components/image/image.cpp +1 -0
  266. esphome/components/ina219/ina219.cpp +2 -2
  267. esphome/components/ina226/ina226.cpp +8 -5
  268. esphome/components/ina260/ina260.cpp +1 -1
  269. esphome/components/ina2xx_base/ina2xx_base.cpp +13 -9
  270. esphome/components/ina3221/ina3221.cpp +2 -2
  271. esphome/components/inkplate6/display.py +12 -2
  272. esphome/components/inkplate6/inkplate.cpp +13 -9
  273. esphome/components/inkplate6/inkplate.h +7 -6
  274. esphome/components/integration/integration_sensor.cpp +1 -1
  275. esphome/components/internal_temperature/internal_temperature.cpp +4 -4
  276. esphome/components/json/json_util.cpp +4 -5
  277. esphome/components/kamstrup_kmp/kamstrup_kmp.cpp +1 -1
  278. esphome/components/key_collector/key_collector.cpp +4 -2
  279. esphome/components/kmeteriso/kmeteriso.cpp +4 -4
  280. esphome/components/kuntze/kuntze.cpp +4 -2
  281. esphome/components/lc709203f/__init__.py +1 -0
  282. esphome/components/lc709203f/lc709203f.cpp +299 -0
  283. esphome/components/lc709203f/lc709203f.h +55 -0
  284. esphome/components/lc709203f/sensor.py +93 -0
  285. esphome/components/lcd_base/lcd_display.cpp +2 -2
  286. esphome/components/lcd_gpio/gpio_lcd_display.cpp +5 -3
  287. esphome/components/lcd_menu/lcd_menu.cpp +6 -4
  288. esphome/components/lcd_pcf8574/pcf8574_display.cpp +6 -4
  289. esphome/components/ld2410/ld2410.cpp +6 -7
  290. esphome/components/ld2420/ld2420.cpp +9 -7
  291. esphome/components/ld2450/ld2450.cpp +6 -4
  292. esphome/components/ld2450/sensor.py +2 -2
  293. esphome/components/ledc/ledc_output.cpp +32 -28
  294. esphome/components/libretiny/const.py +1 -1
  295. esphome/components/libretiny/preferences.cpp +6 -7
  296. esphome/components/light/__init__.py +2 -1
  297. esphome/components/light/esp_hsv_color.h +1 -1
  298. esphome/components/light/light_state.cpp +9 -5
  299. esphome/components/light/light_state.h +15 -15
  300. esphome/components/light/light_transformer.h +1 -1
  301. esphome/components/lightwaverf/LwTx.cpp +1 -1
  302. esphome/components/lightwaverf/lightwaverf.cpp +1 -1
  303. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +1 -1
  304. esphome/components/lock/__init__.py +1 -0
  305. esphome/components/lock/lock.h +1 -1
  306. esphome/components/logger/__init__.py +6 -0
  307. esphome/components/logger/logger.cpp +11 -20
  308. esphome/components/logger/logger.h +5 -6
  309. esphome/components/logger/logger_esp32.cpp +5 -5
  310. esphome/components/ltr390/ltr390.cpp +8 -5
  311. esphome/components/ltr501/ltr501.cpp +19 -14
  312. esphome/components/ltr_als_ps/ltr_als_ps.cpp +20 -13
  313. esphome/components/lvgl/__init__.py +2 -2
  314. esphome/components/lvgl/automation.py +5 -4
  315. esphome/components/lvgl/defines.py +0 -2
  316. esphome/components/lvgl/lv_validation.py +1 -3
  317. esphome/components/lvgl/lvcode.py +7 -8
  318. esphome/components/lvgl/lvgl_esphome.cpp +26 -10
  319. esphome/components/lvgl/schemas.py +22 -23
  320. esphome/components/lvgl/trigger.py +8 -3
  321. esphome/components/lvgl/widgets/__init__.py +2 -2
  322. esphome/components/lvgl/widgets/canvas.py +9 -3
  323. esphome/components/lvgl/widgets/line.py +2 -1
  324. esphome/components/lvgl/widgets/tabview.py +7 -0
  325. esphome/components/m5stack_8angle/m5stack_8angle.cpp +3 -3
  326. esphome/components/matrix_keypad/matrix_keypad.cpp +2 -2
  327. esphome/components/max17043/max17043.cpp +2 -2
  328. esphome/components/max31855/max31855.cpp +2 -1
  329. esphome/components/max31856/max31856.cpp +9 -11
  330. esphome/components/max31865/max31865.cpp +6 -4
  331. esphome/components/max44009/max44009.cpp +2 -2
  332. esphome/components/max6675/max6675.cpp +1 -1
  333. esphome/components/max6956/max6956.cpp +5 -3
  334. esphome/components/max7219/max7219.cpp +8 -6
  335. esphome/components/max7219digit/automation.h +52 -0
  336. esphome/components/max7219digit/display.py +93 -1
  337. esphome/components/max7219digit/max7219digit.cpp +16 -13
  338. esphome/components/max9611/max9611.cpp +9 -6
  339. esphome/components/mcp23008/mcp23008.cpp +1 -1
  340. esphome/components/mcp23016/mcp23016.cpp +1 -1
  341. esphome/components/mcp23017/mcp23017.cpp +1 -1
  342. esphome/components/mcp23s08/mcp23s08.cpp +1 -1
  343. esphome/components/mcp23s17/mcp23s17.cpp +1 -1
  344. esphome/components/mcp3008/mcp3008.cpp +1 -1
  345. esphome/components/mcp3008/sensor/mcp3008_sensor.cpp +5 -3
  346. esphome/components/mcp3204/mcp3204.cpp +1 -1
  347. esphome/components/mcp4461/mcp4461.cpp +2 -2
  348. esphome/components/mcp4725/mcp4725.cpp +2 -2
  349. esphome/components/mcp4728/mcp4728.cpp +2 -2
  350. esphome/components/mcp9600/mcp9600.cpp +1 -1
  351. esphome/components/mcp9808/mcp9808.cpp +4 -4
  352. esphome/components/mdns/mdns_component.cpp +8 -2
  353. esphome/components/mdns/mdns_component.h +3 -1
  354. esphome/components/mdns/mdns_esp32.cpp +2 -2
  355. esphome/components/media_player/__init__.py +1 -0
  356. esphome/components/micro_wake_word/micro_wake_word.cpp +1 -1
  357. esphome/components/micro_wake_word/streaming_model.cpp +10 -6
  358. esphome/components/micronova/micronova.h +2 -2
  359. esphome/components/mics_4514/mics_4514.cpp +2 -2
  360. esphome/components/midea/air_conditioner.cpp +7 -5
  361. esphome/components/midea_ir/midea_ir.cpp +1 -1
  362. esphome/components/mipi_spi/mipi_spi.cpp +24 -15
  363. esphome/components/mixer/speaker/mixer_speaker.cpp +8 -4
  364. esphome/components/mlx90393/sensor_mlx90393.cpp +2 -2
  365. esphome/components/mlx90614/mlx90614.cpp +4 -3
  366. esphome/components/mmc5603/mmc5603.cpp +2 -2
  367. esphome/components/mmc5983/mmc5983.cpp +1 -1
  368. esphome/components/modbus/modbus.cpp +7 -5
  369. esphome/components/modbus_controller/modbus_controller.cpp +6 -4
  370. esphome/components/modbus_controller/output/modbus_output.cpp +10 -6
  371. esphome/components/modbus_controller/switch/__init__.py +6 -2
  372. esphome/components/modbus_controller/switch/modbus_switch.cpp +4 -0
  373. esphome/components/modbus_controller/switch/modbus_switch.h +3 -0
  374. esphome/components/mpl3115a2/mpl3115a2.cpp +3 -2
  375. esphome/components/mpr121/mpr121.cpp +2 -2
  376. esphome/components/mpu6050/mpu6050.cpp +6 -6
  377. esphome/components/mpu6886/mpu6886.cpp +6 -6
  378. esphome/components/mqtt/mqtt_alarm_control_panel.cpp +7 -3
  379. esphome/components/mqtt/mqtt_backend_esp32.cpp +1 -1
  380. esphome/components/mqtt/mqtt_client.cpp +31 -24
  381. esphome/components/mqtt/mqtt_component.cpp +3 -3
  382. esphome/components/mqtt/mqtt_cover.cpp +8 -4
  383. esphome/components/mqtt/mqtt_fan.cpp +12 -6
  384. esphome/components/mqtt/mqtt_valve.cpp +4 -2
  385. esphome/components/ms5611/ms5611.cpp +2 -2
  386. esphome/components/ms8607/ms8607.cpp +2 -2
  387. esphome/components/msa3xx/msa3xx.cpp +16 -12
  388. esphome/components/my9231/my9231.cpp +7 -5
  389. esphome/components/nau7802/nau7802.cpp +6 -4
  390. esphome/components/neopixelbus/neopixelbus_light.h +2 -2
  391. esphome/components/network/ip_address.h +1 -1
  392. esphome/components/network/util.cpp +13 -0
  393. esphome/components/nextion/base_component.py +2 -0
  394. esphome/components/nextion/binary_sensor/nextion_binarysensor.cpp +3 -4
  395. esphome/components/nextion/display.py +34 -22
  396. esphome/components/nextion/nextion.cpp +182 -143
  397. esphome/components/nextion/nextion.h +36 -0
  398. esphome/components/nextion/nextion_commands.cpp +3 -3
  399. esphome/components/nextion/nextion_upload_arduino.cpp +69 -69
  400. esphome/components/nextion/nextion_upload_idf.cpp +79 -80
  401. esphome/components/nextion/sensor/nextion_sensor.cpp +5 -5
  402. esphome/components/nextion/switch/nextion_switch.cpp +2 -2
  403. esphome/components/nextion/text_sensor/nextion_textsensor.cpp +3 -3
  404. esphome/components/nfc/nci_message.h +1 -1
  405. esphome/components/nfc/ndef_record.h +1 -1
  406. esphome/components/nfc/ndef_record_text.h +1 -1
  407. esphome/components/nfc/ndef_record_uri.h +1 -1
  408. esphome/components/nfc/nfc.h +1 -1
  409. esphome/components/nfc/nfc_tag.h +1 -1
  410. esphome/components/noblex/noblex.cpp +1 -1
  411. esphome/components/npi19/npi19.cpp +5 -7
  412. esphome/components/number/__init__.py +11 -0
  413. esphome/components/number/number.cpp +1 -1
  414. esphome/components/number/number.h +0 -4
  415. esphome/components/online_image/__init__.py +13 -1
  416. esphome/components/online_image/online_image.cpp +26 -4
  417. esphome/components/online_image/online_image.h +21 -4
  418. esphome/components/opentherm/generate.py +3 -3
  419. esphome/components/opentherm/hub.cpp +11 -7
  420. esphome/components/opentherm/number/number.cpp +5 -3
  421. esphome/components/opentherm/opentherm.h +1 -1
  422. esphome/components/opentherm/schema.py +13 -13
  423. esphome/components/opentherm/validate.py +1 -1
  424. esphome/components/openthread/__init__.py +146 -0
  425. esphome/components/openthread/const.py +10 -0
  426. esphome/components/openthread/openthread.cpp +206 -0
  427. esphome/components/openthread/openthread.h +68 -0
  428. esphome/components/openthread/openthread_esp.cpp +164 -0
  429. esphome/components/openthread/tlv.py +58 -0
  430. esphome/components/openthread_info/__init__.py +0 -0
  431. esphome/components/openthread_info/openthread_info_text_sensor.cpp +24 -0
  432. esphome/components/openthread_info/openthread_info_text_sensor.h +218 -0
  433. esphome/components/openthread_info/text_sensor.py +105 -0
  434. esphome/components/output/float_output.cpp +1 -1
  435. esphome/components/output/switch/output_switch.cpp +1 -1
  436. esphome/components/packet_transport/packet_transport.cpp +6 -4
  437. esphome/components/pca6416a/pca6416a.cpp +2 -2
  438. esphome/components/pca9554/pca9554.cpp +6 -4
  439. esphome/components/pca9685/pca9685_output.cpp +12 -8
  440. esphome/components/pcd8544/pcd_8544.cpp +1 -1
  441. esphome/components/pcf85063/pcf85063.cpp +2 -2
  442. esphome/components/pcf8563/pcf8563.cpp +2 -2
  443. esphome/components/pcf8574/pcf8574.cpp +2 -2
  444. esphome/components/pid/pid_climate.cpp +8 -5
  445. esphome/components/pid/pid_climate.h +1 -1
  446. esphome/components/pid/sensor/pid_climate_sensor.cpp +1 -1
  447. esphome/components/pipsolar/output/pipsolar_output.cpp +1 -1
  448. esphome/components/pipsolar/pipsolar.cpp +3 -3
  449. esphome/components/pm1006/pm1006.cpp +3 -7
  450. esphome/components/pm1006/pm1006.h +4 -1
  451. esphome/components/pm2005/pm2005.cpp +12 -13
  452. esphome/components/pm2005/sensor.py +1 -1
  453. esphome/components/pmsa003i/pmsa003i.cpp +2 -2
  454. esphome/components/pmsx003/pmsx003.cpp +0 -4
  455. esphome/components/pmsx003/pmsx003.h +5 -2
  456. esphome/components/pmwcs3/pmwcs3.cpp +9 -13
  457. esphome/components/pmwcs3/pmwcs3.h +0 -1
  458. esphome/components/pn532/pn532.cpp +7 -7
  459. esphome/components/pn532/pn532.h +1 -1
  460. esphome/components/pn532_spi/pn532_spi.cpp +1 -1
  461. esphome/components/pn7150/pn7150.cpp +4 -4
  462. esphome/components/pn7160/pn7160.cpp +4 -4
  463. esphome/components/power_supply/power_supply.cpp +6 -4
  464. esphome/components/power_supply/power_supply.h +1 -1
  465. esphome/components/prometheus/__init__.py +0 -1
  466. esphome/components/psram/__init__.py +59 -35
  467. esphome/components/pulse_counter/pulse_counter_sensor.cpp +7 -4
  468. esphome/components/pvvx_mithermometer/display/pvvx_display.cpp +8 -5
  469. esphome/components/pylontech/pylontech.cpp +2 -2
  470. esphome/components/pylontech/sensor/pylontech_sensor.cpp +4 -2
  471. esphome/components/pylontech/text_sensor/pylontech_text_sensor.cpp +4 -2
  472. esphome/components/pzemac/pzemac.cpp +4 -2
  473. esphome/components/pzemdc/pzemdc.cpp +4 -2
  474. esphome/components/qmc5883l/qmc5883l.cpp +2 -2
  475. esphome/components/qmp6988/qmp6988.cpp +2 -2
  476. esphome/components/qmp6988/qmp6988.h +1 -1
  477. esphome/components/qr_code/qr_code.cpp +5 -3
  478. esphome/components/qspi_dbi/qspi_dbi.cpp +1 -1
  479. esphome/components/qwiic_pir/qwiic_pir.cpp +26 -28
  480. esphome/components/rc522/rc522.cpp +5 -5
  481. esphome/components/rdm6300/rdm6300.cpp +1 -0
  482. esphome/components/remote_receiver/__init__.py +10 -2
  483. esphome/components/remote_receiver/remote_receiver_esp32.cpp +22 -12
  484. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +10 -7
  485. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +10 -7
  486. esphome/components/remote_transmitter/__init__.py +10 -2
  487. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +10 -6
  488. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +5 -3
  489. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +5 -3
  490. esphome/components/resistance/resistance_sensor.cpp +6 -3
  491. esphome/components/restart/button/restart_button.cpp +1 -1
  492. esphome/components/restart/switch/restart_switch.cpp +1 -1
  493. esphome/components/rotary_encoder/rotary_encoder.cpp +2 -2
  494. esphome/components/rp2040/__init__.py +7 -0
  495. esphome/components/rp2040/core.cpp +8 -1
  496. esphome/components/rp2040/gpio.cpp +26 -9
  497. esphome/components/rp2040/preferences.cpp +3 -3
  498. esphome/components/rp2040_pio_led_strip/led_strip.cpp +11 -8
  499. esphome/components/rp2040_pio_led_strip/light.py +1 -1
  500. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -1
  501. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +1 -1
  502. esphome/components/rtttl/rtttl.cpp +11 -9
  503. esphome/components/safe_mode/button/safe_mode_button.cpp +1 -1
  504. esphome/components/safe_mode/safe_mode.cpp +9 -8
  505. esphome/components/safe_mode/switch/safe_mode_switch.cpp +1 -1
  506. esphome/components/scd30/scd30.cpp +11 -8
  507. esphome/components/scd4x/scd4x.cpp +12 -8
  508. esphome/components/sdl/display.py +40 -0
  509. esphome/components/sdl/sdl_esphome.cpp +2 -2
  510. esphome/components/sdl/sdl_esphome.h +8 -0
  511. esphome/components/sdm_meter/sdm_meter.cpp +5 -2
  512. esphome/components/sdp3x/sdp3x.cpp +11 -11
  513. esphome/components/sds011/sds011.cpp +5 -6
  514. esphome/components/sds011/sds011.h +4 -1
  515. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +3 -2
  516. esphome/components/seeed_mr60bha2/seeed_mr60bha2.cpp +1 -0
  517. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +3 -2
  518. esphome/components/selec_meter/selec_meter.cpp +5 -2
  519. esphome/components/select/__init__.py +1 -0
  520. esphome/components/select/select.cpp +1 -1
  521. esphome/components/select/select.h +0 -4
  522. esphome/components/sen0321/sen0321.cpp +2 -2
  523. esphome/components/sen21231/sen21231.cpp +1 -1
  524. esphome/components/sen5x/sen5x.cpp +10 -7
  525. esphome/components/sensirion_common/i2c_sensirion.cpp +2 -1
  526. esphome/components/sensirion_common/i2c_sensirion.h +1 -0
  527. esphome/components/sensor/__init__.py +11 -1
  528. esphome/components/sensor/filter.h +1 -1
  529. esphome/components/sensor/sensor.cpp +8 -4
  530. esphome/components/sensor/sensor.h +12 -11
  531. esphome/components/servo/servo.cpp +12 -9
  532. esphome/components/servo/servo.h +1 -1
  533. esphome/components/sfa30/sfa30.cpp +1 -1
  534. esphome/components/sgp30/sgp30.cpp +10 -8
  535. esphome/components/sgp4x/sgp4x.cpp +49 -61
  536. esphome/components/sgp4x/sgp4x.h +0 -1
  537. esphome/components/shelly_dimmer/shelly_dimmer.cpp +11 -7
  538. esphome/components/sht3xd/sht3xd.cpp +1 -1
  539. esphome/components/sht4x/sht4x.cpp +2 -2
  540. esphome/components/shtcx/shtcx.cpp +13 -16
  541. esphome/components/shutdown/button/shutdown_button.cpp +1 -1
  542. esphome/components/shutdown/switch/shutdown_switch.cpp +1 -1
  543. esphome/components/sim800l/sim800l.cpp +2 -2
  544. esphome/components/slow_pwm/slow_pwm_output.cpp +4 -2
  545. esphome/components/sm16716/sm16716.cpp +1 -1
  546. esphome/components/sm2135/sm2135.cpp +1 -1
  547. esphome/components/sm2235/sm2235.cpp +5 -3
  548. esphome/components/sm2335/sm2335.cpp +5 -3
  549. esphome/components/sml/sml.cpp +1 -1
  550. esphome/components/sn74hc165/sn74hc165.cpp +1 -2
  551. esphome/components/sn74hc595/sn74hc595.cpp +1 -2
  552. esphome/components/sntp/sntp_component.cpp +1 -1
  553. esphome/components/socket/__init__.py +2 -0
  554. esphome/components/socket/bsd_sockets_impl.cpp +51 -7
  555. esphome/components/socket/lwip_raw_tcp_impl.cpp +5 -0
  556. esphome/components/socket/lwip_sockets_impl.cpp +51 -7
  557. esphome/components/socket/socket.cpp +31 -0
  558. esphome/components/socket/socket.h +27 -1
  559. esphome/components/sonoff_d1/sonoff_d1.cpp +7 -4
  560. esphome/components/sonoff_d1/sonoff_d1.h +2 -2
  561. esphome/components/sound_level/sound_level.cpp +4 -2
  562. esphome/components/speaker/media_player/__init__.py +3 -0
  563. esphome/components/speaker/media_player/speaker_media_player.cpp +1 -3
  564. esphome/components/speaker/media_player/speaker_media_player.h +6 -0
  565. esphome/components/spi/__init__.py +10 -2
  566. esphome/components/spi/spi.cpp +4 -4
  567. esphome/components/spi/spi_arduino.cpp +22 -9
  568. esphome/components/spi_device/spi_device.cpp +1 -2
  569. esphome/components/sprinkler/sprinkler.cpp +9 -6
  570. esphome/components/sps30/sps30.cpp +16 -15
  571. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  572. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +11 -8
  573. esphome/components/ssd1306_spi/ssd1306_spi.cpp +10 -7
  574. esphome/components/ssd1322_base/ssd1322_base.cpp +1 -1
  575. esphome/components/ssd1322_spi/ssd1322_spi.cpp +1 -1
  576. esphome/components/ssd1325_base/ssd1325_base.cpp +1 -1
  577. esphome/components/ssd1325_spi/ssd1325_spi.cpp +1 -1
  578. esphome/components/ssd1327_base/ssd1327_base.cpp +1 -1
  579. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +2 -2
  580. esphome/components/ssd1327_spi/ssd1327_spi.cpp +1 -1
  581. esphome/components/ssd1331_base/ssd1331_base.cpp +1 -1
  582. esphome/components/ssd1331_spi/ssd1331_spi.cpp +1 -1
  583. esphome/components/ssd1351_base/ssd1351_base.cpp +1 -1
  584. esphome/components/ssd1351_spi/ssd1351_spi.cpp +1 -1
  585. esphome/components/st7567_base/st7567_base.cpp +3 -3
  586. esphome/components/st7567_i2c/st7567_i2c.cpp +7 -5
  587. esphome/components/st7567_spi/st7567_spi.cpp +1 -1
  588. esphome/components/st7701s/st7701s.cpp +4 -2
  589. esphome/components/st7735/st7735.cpp +3 -3
  590. esphome/components/st7789v/st7789v.cpp +10 -7
  591. esphome/components/st7920/st7920.cpp +6 -4
  592. esphome/components/statsd/statsd.cpp +9 -5
  593. esphome/components/status_led/light/status_led_light.cpp +3 -3
  594. esphome/components/status_led/light/status_led_light.h +1 -1
  595. esphome/components/status_led/status_led.cpp +1 -1
  596. esphome/components/stepper/stepper.h +5 -3
  597. esphome/components/sts3x/sts3x.cpp +2 -2
  598. esphome/components/switch/__init__.py +1 -0
  599. esphome/components/switch/switch.cpp +18 -12
  600. esphome/components/switch/switch.h +14 -8
  601. esphome/components/sx1509/__init__.py +53 -20
  602. esphome/components/sx1509/sx1509.cpp +29 -5
  603. esphome/components/sx1509/sx1509.h +9 -1
  604. esphome/components/t6615/t6615.cpp +1 -0
  605. esphome/components/tc74/tc74.cpp +1 -1
  606. esphome/components/tca9548a/tca9548a.cpp +1 -1
  607. esphome/components/tca9555/tca9555.cpp +2 -2
  608. esphome/components/tcs34725/tcs34725.cpp +4 -4
  609. esphome/components/tee501/tee501.cpp +3 -2
  610. esphome/components/tem3200/tem3200.cpp +5 -6
  611. esphome/components/template/alarm_control_panel/__init__.py +6 -0
  612. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +43 -12
  613. esphome/components/template/alarm_control_panel/template_alarm_control_panel.h +4 -1
  614. esphome/components/template/cover/template_cover.cpp +1 -1
  615. esphome/components/template/select/template_select.cpp +6 -4
  616. esphome/components/template/text/template_text.cpp +2 -3
  617. esphome/components/template/valve/template_valve.cpp +5 -3
  618. esphome/components/text/__init__.py +10 -11
  619. esphome/components/text/text.cpp +1 -1
  620. esphome/components/text/text.h +0 -4
  621. esphome/components/text_sensor/__init__.py +1 -0
  622. esphome/components/text_sensor/text_sensor.cpp +8 -4
  623. esphome/components/text_sensor/text_sensor.h +6 -6
  624. esphome/components/thermostat/thermostat_climate.cpp +67 -43
  625. esphome/components/time/__init__.py +1 -2
  626. esphome/components/time_based/time_based_cover.cpp +4 -2
  627. esphome/components/tlc59208f/tlc59208f_output.cpp +8 -6
  628. esphome/components/tm1621/tm1621.cpp +3 -3
  629. esphome/components/tm1637/tm1637.cpp +9 -7
  630. esphome/components/tm1638/tm1638.cpp +7 -5
  631. esphome/components/tm1651/tm1651.cpp +2 -2
  632. esphome/components/tmp102/tmp102.cpp +1 -3
  633. esphome/components/tmp102/tmp102.h +0 -3
  634. esphome/components/tmp1075/tmp1075.cpp +12 -9
  635. esphome/components/tmp117/tmp117.cpp +2 -2
  636. esphome/components/tof10120/tof10120_sensor.cpp +2 -2
  637. esphome/components/tormatic/tormatic_cover.cpp +4 -2
  638. esphome/components/tsl2561/tsl2561.cpp +7 -5
  639. esphome/components/tsl2591/tsl2591.cpp +25 -27
  640. esphome/components/tt21100/touchscreen/tt21100.cpp +1 -1
  641. esphome/components/ttp229_bsf/ttp229_bsf.cpp +1 -1
  642. esphome/components/ttp229_lsf/ttp229_lsf.cpp +2 -2
  643. esphome/components/tuya/select/tuya_select.cpp +5 -3
  644. esphome/components/tx20/tx20.cpp +3 -3
  645. esphome/components/uart/__init__.py +4 -5
  646. esphome/components/uart/button/uart_button.cpp +1 -1
  647. esphome/components/uart/switch/uart_switch.cpp +2 -2
  648. esphome/components/uart/uart.cpp +2 -2
  649. esphome/components/uart/uart_component_esp32_arduino.cpp +8 -6
  650. esphome/components/uart/uart_component_esp8266.cpp +9 -7
  651. esphome/components/uart/uart_component_esp_idf.cpp +9 -7
  652. esphome/components/uart/uart_component_host.cpp +11 -8
  653. esphome/components/uart/uart_component_libretiny.cpp +8 -6
  654. esphome/components/uart/uart_component_rp2040.cpp +8 -6
  655. esphome/components/udp/udp_component.cpp +9 -5
  656. esphome/components/ufire_ec/ufire_ec.cpp +5 -3
  657. esphome/components/ufire_ise/ufire_ise.cpp +1 -1
  658. esphome/components/ultrasonic/ultrasonic_sensor.cpp +5 -3
  659. esphome/components/update/__init__.py +1 -0
  660. esphome/components/update/update_entity.cpp +1 -1
  661. esphome/components/update/update_entity.h +0 -3
  662. esphome/components/uponor_smatrix/climate/uponor_smatrix_climate.cpp +1 -1
  663. esphome/components/uponor_smatrix/sensor/uponor_smatrix_sensor.cpp +4 -2
  664. esphome/components/uponor_smatrix/uponor_smatrix.cpp +2 -1
  665. esphome/components/uptime/sensor/uptime_timestamp_sensor.cpp +1 -1
  666. esphome/components/usb_host/__init__.py +64 -0
  667. esphome/components/usb_host/usb_host.h +116 -0
  668. esphome/components/usb_host/usb_host_client.cpp +394 -0
  669. esphome/components/usb_host/usb_host_component.cpp +35 -0
  670. esphome/components/usb_uart/__init__.py +134 -0
  671. esphome/components/usb_uart/ch34x.cpp +80 -0
  672. esphome/components/usb_uart/cp210x.cpp +126 -0
  673. esphome/components/usb_uart/usb_uart.cpp +328 -0
  674. esphome/components/usb_uart/usb_uart.h +151 -0
  675. esphome/components/valve/__init__.py +1 -0
  676. esphome/components/veml3235/veml3235.cpp +13 -9
  677. esphome/components/veml7700/veml7700.cpp +10 -6
  678. esphome/components/voice_assistant/voice_assistant.cpp +7 -7
  679. esphome/components/wake_on_lan/wake_on_lan.cpp +1 -1
  680. esphome/components/waveshare_epaper/waveshare_epaper.cpp +1 -1
  681. esphome/components/web_server/server_index_v2.h +632 -630
  682. esphome/components/web_server/server_index_v3.h +411 -409
  683. esphome/components/web_server/web_server.cpp +5 -3
  684. esphome/components/web_server_base/web_server_base.cpp +1 -1
  685. esphome/components/web_server_idf/__init__.py +0 -2
  686. esphome/components/web_server_idf/utils.cpp +1 -1
  687. esphome/components/web_server_idf/web_server_idf.cpp +7 -3
  688. esphome/components/web_server_idf/web_server_idf.h +7 -0
  689. esphome/components/weikai/__init__.py +2 -0
  690. esphome/components/weikai/weikai.cpp +24 -22
  691. esphome/components/weikai_i2c/weikai_i2c.cpp +14 -9
  692. esphome/components/weikai_spi/weikai_spi.cpp +11 -6
  693. esphome/components/wiegand/wiegand.cpp +1 -1
  694. esphome/components/wifi/wifi_component.cpp +50 -37
  695. esphome/components/wifi/wifi_component.h +7 -4
  696. esphome/components/wifi/wifi_component_esp32_arduino.cpp +2 -2
  697. esphome/components/wifi/wifi_component_esp8266.cpp +3 -3
  698. esphome/components/wifi/wifi_component_libretiny.cpp +4 -4
  699. esphome/components/wireguard/wireguard.cpp +21 -21
  700. esphome/components/wl_134/text_sensor.py +1 -2
  701. esphome/components/wled/wled_light_effect.cpp +1 -1
  702. esphome/components/x9c/x9c.cpp +5 -3
  703. esphome/components/xgzp68xx/xgzp68xx.cpp +8 -6
  704. esphome/components/xiaomi_cgd1/xiaomi_cgd1.cpp +4 -2
  705. esphome/components/xiaomi_cgdk2/xiaomi_cgdk2.cpp +4 -2
  706. esphome/components/xiaomi_cgg1/xiaomi_cgg1.cpp +4 -2
  707. esphome/components/xiaomi_hhccjcy10/xiaomi_hhccjcy10.cpp +1 -1
  708. esphome/components/xiaomi_lywsd02mmc/xiaomi_lywsd02mmc.cpp +4 -2
  709. esphome/components/xiaomi_lywsd03mmc/xiaomi_lywsd03mmc.cpp +4 -2
  710. esphome/components/xiaomi_mhoc401/xiaomi_mhoc401.cpp +4 -2
  711. esphome/components/xl9535/xl9535.cpp +2 -2
  712. esphome/components/xpt2046/touchscreen/xpt2046.cpp +12 -11
  713. esphome/components/xpt2046/touchscreen/xpt2046.h +2 -2
  714. esphome/config.py +3 -2
  715. esphome/config_validation.py +46 -17
  716. esphome/const.py +10 -1
  717. esphome/core/__init__.py +37 -18
  718. esphome/core/application.cpp +197 -8
  719. esphome/core/application.h +116 -6
  720. esphome/core/component.cpp +36 -15
  721. esphome/core/component.h +43 -13
  722. esphome/core/config.py +12 -0
  723. esphome/core/defines.h +10 -2
  724. esphome/core/entity_base.cpp +4 -16
  725. esphome/core/entity_base.h +27 -13
  726. esphome/core/hal.h +5 -0
  727. esphome/core/helpers.cpp +1 -1
  728. esphome/core/helpers.h +5 -5
  729. esphome/core/log.h +2 -0
  730. esphome/core/log_const_en.h +4 -0
  731. esphome/core/scheduler.cpp +2 -2
  732. esphome/coroutine.py +3 -4
  733. esphome/cpp_generator.py +32 -32
  734. esphome/dashboard/core.py +2 -2
  735. esphome/dashboard/web_server.py +2 -2
  736. esphome/git.py +4 -4
  737. esphome/helpers.py +5 -6
  738. esphome/loader.py +8 -7
  739. esphome/log.py +7 -1
  740. esphome/platformio_api.py +2 -3
  741. esphome/storage_json.py +13 -5
  742. esphome/types.py +12 -13
  743. esphome/util.py +1 -2
  744. esphome/wizard.py +0 -16
  745. esphome/writer.py +5 -3
  746. esphome/yaml_util.py +6 -1
  747. esphome/zeroconf.py +1 -1
  748. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/METADATA +12 -11
  749. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/RECORD +753 -699
  750. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/WHEEL +1 -1
  751. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/entry_points.txt +0 -0
  752. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/licenses/LICENSE +0 -0
  753. {esphome-2025.5.1.dist-info → esphome-2025.6.0.dist-info}/top_level.txt +0 -0
@@ -8,7 +8,7 @@ namespace rp2040 {
8
8
 
9
9
  static const char *const TAG = "rp2040";
10
10
 
11
- static int IRAM_ATTR flags_to_mode(gpio::Flags flags, uint8_t pin) {
11
+ static int flags_to_mode(gpio::Flags flags, uint8_t pin) {
12
12
  if (flags == gpio::FLAG_INPUT) { // NOLINT(bugprone-branch-clone)
13
13
  return INPUT;
14
14
  } else if (flags == gpio::FLAG_OUTPUT) {
@@ -25,14 +25,16 @@ static int IRAM_ATTR flags_to_mode(gpio::Flags flags, uint8_t pin) {
25
25
  }
26
26
 
27
27
  struct ISRPinArg {
28
+ uint32_t mask;
28
29
  uint8_t pin;
29
30
  bool inverted;
30
31
  };
31
32
 
32
33
  ISRInternalGPIOPin RP2040GPIOPin::to_isr() const {
33
34
  auto *arg = new ISRPinArg{}; // NOLINT(cppcoreguidelines-owning-memory)
34
- arg->pin = pin_;
35
- arg->inverted = inverted_;
35
+ arg->pin = this->pin_;
36
+ arg->inverted = this->inverted_;
37
+ arg->mask = 1 << this->pin_;
36
38
  return ISRInternalGPIOPin((void *) arg);
37
39
  }
38
40
 
@@ -81,21 +83,36 @@ void RP2040GPIOPin::detach_interrupt() const { detachInterrupt(pin_); }
81
83
  using namespace rp2040;
82
84
 
83
85
  bool IRAM_ATTR ISRInternalGPIOPin::digital_read() {
84
- auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
85
- return bool(digitalRead(arg->pin)) != arg->inverted; // NOLINT
86
+ auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
87
+ return bool(sio_hw->gpio_in & arg->mask) != arg->inverted;
86
88
  }
89
+
87
90
  void IRAM_ATTR ISRInternalGPIOPin::digital_write(bool value) {
88
- auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
89
- digitalWrite(arg->pin, value != arg->inverted ? 1 : 0); // NOLINT
91
+ auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
92
+ if (value != arg->inverted) {
93
+ sio_hw->gpio_set = arg->mask;
94
+ } else {
95
+ sio_hw->gpio_clr = arg->mask;
96
+ }
90
97
  }
98
+
91
99
  void IRAM_ATTR ISRInternalGPIOPin::clear_interrupt() {
92
100
  // TODO: implement
93
101
  // auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
94
102
  // GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, 1UL << arg->pin);
95
103
  }
104
+
96
105
  void IRAM_ATTR ISRInternalGPIOPin::pin_mode(gpio::Flags flags) {
97
- auto *arg = reinterpret_cast<ISRPinArg *>(arg_);
98
- pinMode(arg->pin, flags_to_mode(flags, arg->pin)); // NOLINT
106
+ auto *arg = reinterpret_cast<ISRPinArg *>(this->arg_);
107
+ if (flags & gpio::FLAG_OUTPUT) {
108
+ sio_hw->gpio_oe_set = arg->mask;
109
+ } else if (flags & gpio::FLAG_INPUT) {
110
+ sio_hw->gpio_oe_clr = arg->mask;
111
+ hw_write_masked(&padsbank0_hw->io[arg->pin],
112
+ (bool_to_bit(flags & gpio::FLAG_PULLUP) << PADS_BANK0_GPIO0_PUE_LSB) |
113
+ (bool_to_bit(flags & gpio::FLAG_PULLDOWN) << PADS_BANK0_GPIO0_PDE_LSB),
114
+ PADS_BANK0_GPIO0_PUE_BITS | PADS_BANK0_GPIO0_PDE_BITS);
115
+ }
99
116
  }
100
117
 
101
118
  } // namespace esphome
@@ -87,7 +87,7 @@ class RP2040Preferences : public ESPPreferences {
87
87
  RP2040Preferences() : eeprom_sector_(&_EEPROM_start) {}
88
88
  void setup() {
89
89
  s_flash_storage = new uint8_t[RP2040_FLASH_STORAGE_SIZE]; // NOLINT
90
- ESP_LOGVV(TAG, "Loading preferences from flash...");
90
+ ESP_LOGVV(TAG, "Loading preferences from flash");
91
91
  memcpy(s_flash_storage, this->eeprom_sector_, RP2040_FLASH_STORAGE_SIZE);
92
92
  }
93
93
 
@@ -114,7 +114,7 @@ class RP2040Preferences : public ESPPreferences {
114
114
  if (s_prevent_write)
115
115
  return false;
116
116
 
117
- ESP_LOGD(TAG, "Saving preferences to flash...");
117
+ ESP_LOGD(TAG, "Saving");
118
118
 
119
119
  {
120
120
  InterruptLock lock;
@@ -129,7 +129,7 @@ class RP2040Preferences : public ESPPreferences {
129
129
  }
130
130
 
131
131
  bool reset() override {
132
- ESP_LOGD(TAG, "Cleaning up preferences in flash...");
132
+ ESP_LOGD(TAG, "Erasing storage");
133
133
  {
134
134
  InterruptLock lock;
135
135
  ::rp2040.idleOtherCore();
@@ -40,7 +40,7 @@ void RP2040PIOLEDStripLightOutput::dma_write_complete_handler_() {
40
40
  }
41
41
 
42
42
  void RP2040PIOLEDStripLightOutput::setup() {
43
- ESP_LOGCONFIG(TAG, "Setting up RP2040 LED Strip...");
43
+ ESP_LOGCONFIG(TAG, "Running setup");
44
44
 
45
45
  size_t buffer_size = this->get_buffer_size_();
46
46
 
@@ -138,7 +138,7 @@ void RP2040PIOLEDStripLightOutput::setup() {
138
138
  }
139
139
 
140
140
  void RP2040PIOLEDStripLightOutput::write_state(light::LightState *state) {
141
- ESP_LOGVV(TAG, "Writing state...");
141
+ ESP_LOGVV(TAG, "Writing state");
142
142
 
143
143
  if (this->is_failed()) {
144
144
  ESP_LOGW(TAG, "Light is in failed state, not writing state.");
@@ -199,12 +199,15 @@ light::ESPColorView RP2040PIOLEDStripLightOutput::get_view_internal(int32_t inde
199
199
  }
200
200
 
201
201
  void RP2040PIOLEDStripLightOutput::dump_config() {
202
- ESP_LOGCONFIG(TAG, "RP2040 PIO LED Strip Light Output:");
203
- ESP_LOGCONFIG(TAG, " Pin: GPIO%d", this->pin_);
204
- ESP_LOGCONFIG(TAG, " Number of LEDs: %d", this->num_leds_);
205
- ESP_LOGCONFIG(TAG, " RGBW: %s", YESNO(this->is_rgbw_));
206
- ESP_LOGCONFIG(TAG, " RGB Order: %s", rgb_order_to_string(this->rgb_order_));
207
- ESP_LOGCONFIG(TAG, " Max Refresh Rate: %f Hz", this->max_refresh_rate_);
202
+ ESP_LOGCONFIG(TAG,
203
+ "RP2040 PIO LED Strip Light Output:\n"
204
+ " Pin: GPIO%d\n"
205
+ " Number of LEDs: %d\n"
206
+ " RGBW: %s\n"
207
+ " RGB Order: %s\n"
208
+ " Max Refresh Rate: %f Hz",
209
+ this->pin_, this->num_leds_, YESNO(this->is_rgbw_), rgb_order_to_string(this->rgb_order_),
210
+ this->max_refresh_rate_);
208
211
  }
209
212
 
210
213
  float RP2040PIOLEDStripLightOutput::get_setup_priority() const { return setup_priority::HARDWARE; }
@@ -173,7 +173,7 @@ RGB_ORDERS = {
173
173
  CHIPSET_TIMINGS = {
174
174
  "WS2812": LEDStripTimings(20, 40, 46, 34),
175
175
  "WS2812B": LEDStripTimings(23, 49, 46, 26),
176
- "SK6812": LEDStripTimings(17, 52, 34, 34),
176
+ "SK6812": LEDStripTimings(20, 54, 38, 38),
177
177
  "SM16703": LEDStripTimings(17, 52, 52, 17),
178
178
  }
179
179
 
@@ -17,7 +17,7 @@ namespace rp2040_pwm {
17
17
  static const char *const TAG = "rp2040_pwm";
18
18
 
19
19
  void RP2040PWM::setup() {
20
- ESP_LOGCONFIG(TAG, "Setting up RP2040 PWM Output...");
20
+ ESP_LOGCONFIG(TAG, "Running setup");
21
21
 
22
22
  this->setup_pwm_();
23
23
  }
@@ -6,7 +6,7 @@ namespace esphome {
6
6
  namespace rpi_dpi_rgb {
7
7
 
8
8
  void RpiDpiRgb::setup() {
9
- ESP_LOGCONFIG(TAG, "Setting up RPI_DPI_RGB");
9
+ ESP_LOGCONFIG(TAG, "Running setup");
10
10
  this->reset_display_();
11
11
  esp_lcd_rgb_panel_config_t config{};
12
12
  config.flags.fb_in_psram = 1;
@@ -27,15 +27,17 @@ inline double deg2rad(double degrees) {
27
27
  }
28
28
 
29
29
  void Rtttl::dump_config() {
30
- ESP_LOGCONFIG(TAG, "Rtttl:");
31
- ESP_LOGCONFIG(TAG, " Gain: %f", gain_);
30
+ ESP_LOGCONFIG(TAG,
31
+ "Rtttl:\n"
32
+ " Gain: %f",
33
+ this->gain_);
32
34
  }
33
35
 
34
36
  void Rtttl::play(std::string rtttl) {
35
37
  if (this->state_ != State::STATE_STOPPED && this->state_ != State::STATE_STOPPING) {
36
38
  int pos = this->rtttl_.find(':');
37
39
  auto name = this->rtttl_.substr(0, pos);
38
- ESP_LOGW(TAG, "RTTTL Component is already playing: %s", name.c_str());
40
+ ESP_LOGW(TAG, "Already playing: %s", name.c_str());
39
41
  return;
40
42
  }
41
43
 
@@ -49,11 +51,11 @@ void Rtttl::play(std::string rtttl) {
49
51
  uint8_t num;
50
52
 
51
53
  // Get name
52
- this->position_ = rtttl_.find(':');
54
+ this->position_ = this->rtttl_.find(':');
53
55
 
54
56
  // it's somewhat documented to be up to 10 characters but let's be a bit flexible here
55
57
  if (this->position_ == std::string::npos || this->position_ > 15) {
56
- ESP_LOGE(TAG, "Missing ':' when looking for name.");
58
+ ESP_LOGE(TAG, "Unable to determine name; missing ':'");
57
59
  return;
58
60
  }
59
61
 
@@ -203,7 +205,7 @@ void Rtttl::loop() {
203
205
  if (this->output_ != nullptr && millis() - this->last_note_ < this->note_duration_)
204
206
  return;
205
207
  #endif
206
- if (!this->rtttl_[position_]) {
208
+ if (!this->rtttl_[this->position_]) {
207
209
  this->finish_();
208
210
  return;
209
211
  }
@@ -271,7 +273,7 @@ void Rtttl::loop() {
271
273
  scale = this->default_octave_;
272
274
 
273
275
  if (scale < 4 || scale > 7) {
274
- ESP_LOGE(TAG, "Octave out of valid range. Should be between 4 and 7. (Octave: %d)", scale);
276
+ ESP_LOGE(TAG, "Octave must be between 4 and 7 (it is %d)", scale);
275
277
  this->finish_();
276
278
  return;
277
279
  }
@@ -281,7 +283,7 @@ void Rtttl::loop() {
281
283
  if (note) {
282
284
  auto note_index = (scale - 4) * 12 + note;
283
285
  if (note_index < 0 || note_index >= (int) sizeof(NOTES)) {
284
- ESP_LOGE(TAG, "Note out of valid range (note: %d, scale: %d, index: %d, max: %d)", note, scale, note_index,
286
+ ESP_LOGE(TAG, "Note out of range (note: %d, scale: %d, index: %d, max: %d)", note, scale, note_index,
285
287
  (int) sizeof(NOTES));
286
288
  this->finish_();
287
289
  return;
@@ -387,7 +389,7 @@ static const LogString *state_to_string(State state) {
387
389
  void Rtttl::set_state_(State state) {
388
390
  State old_state = this->state_;
389
391
  this->state_ = state;
390
- ESP_LOGD(TAG, "State changed from %s to %s", LOG_STR_ARG(state_to_string(old_state)),
392
+ ESP_LOGV(TAG, "State changed from %s to %s", LOG_STR_ARG(state_to_string(old_state)),
391
393
  LOG_STR_ARG(state_to_string(state)));
392
394
  }
393
395
 
@@ -13,7 +13,7 @@ void SafeModeButton::set_safe_mode(SafeModeComponent *safe_mode_component) {
13
13
  }
14
14
 
15
15
  void SafeModeButton::press_action() {
16
- ESP_LOGI(TAG, "Restarting device in safe mode...");
16
+ ESP_LOGI(TAG, "Restarting in safe mode");
17
17
  this->safe_mode_component_->set_safe_mode_pending(true);
18
18
 
19
19
  // Let MQTT settle a bit
@@ -16,17 +16,18 @@ static const char *const TAG = "safe_mode";
16
16
 
17
17
  void SafeModeComponent::dump_config() {
18
18
  ESP_LOGCONFIG(TAG, "Safe Mode:");
19
- ESP_LOGCONFIG(TAG, " Boot considered successful after %" PRIu32 " seconds",
20
- this->safe_mode_boot_is_good_after_ / 1000); // because milliseconds
21
- ESP_LOGCONFIG(TAG, " Invoke after %u boot attempts", this->safe_mode_num_attempts_);
22
- ESP_LOGCONFIG(TAG, " Remain in safe mode for %" PRIu32 " seconds",
19
+ ESP_LOGCONFIG(TAG,
20
+ " Boot considered successful after %" PRIu32 " seconds\n"
21
+ " Invoke after %u boot attempts\n"
22
+ " Remain for %" PRIu32 " seconds",
23
+ this->safe_mode_boot_is_good_after_ / 1000, // because milliseconds
24
+ this->safe_mode_num_attempts_,
23
25
  this->safe_mode_enable_time_ / 1000); // because milliseconds
24
26
 
25
27
  if (this->safe_mode_rtc_value_ > 1 && this->safe_mode_rtc_value_ != SafeModeComponent::ENTER_SAFE_MODE_MAGIC) {
26
28
  auto remaining_restarts = this->safe_mode_num_attempts_ - this->safe_mode_rtc_value_;
27
29
  if (remaining_restarts) {
28
- ESP_LOGW(TAG, "Last reset occurred too quickly; safe mode will be invoked in %" PRIu32 " restarts",
29
- remaining_restarts);
30
+ ESP_LOGW(TAG, "Last reset occurred too quickly; will be invoked in %" PRIu32 " restarts", remaining_restarts);
30
31
  } else {
31
32
  ESP_LOGW(TAG, "SAFE MODE IS ACTIVE");
32
33
  }
@@ -48,7 +49,7 @@ void SafeModeComponent::set_safe_mode_pending(const bool &pending) {
48
49
  uint32_t current_rtc = this->read_rtc_();
49
50
 
50
51
  if (pending && current_rtc != SafeModeComponent::ENTER_SAFE_MODE_MAGIC) {
51
- ESP_LOGI(TAG, "Device will enter safe mode on next boot");
52
+ ESP_LOGI(TAG, "Device will enter on next boot");
52
53
  this->write_rtc_(SafeModeComponent::ENTER_SAFE_MODE_MAGIC);
53
54
  }
54
55
 
@@ -83,7 +84,7 @@ bool SafeModeComponent::should_enter_safe_mode(uint8_t num_attempts, uint32_t en
83
84
  this->clean_rtc();
84
85
 
85
86
  if (!is_manual_safe_mode) {
86
- ESP_LOGE(TAG, "Boot loop detected. Proceeding to safe mode");
87
+ ESP_LOGE(TAG, "Boot loop detected. Proceeding");
87
88
  }
88
89
 
89
90
  this->status_set_error();
@@ -17,7 +17,7 @@ void SafeModeSwitch::write_state(bool state) {
17
17
  this->publish_state(false);
18
18
 
19
19
  if (state) {
20
- ESP_LOGI(TAG, "Restarting device in safe mode...");
20
+ ESP_LOGI(TAG, "Restarting in safe mode");
21
21
  this->safe_mode_component_->set_safe_mode_pending(true);
22
22
 
23
23
  // Let MQTT settle a bit
@@ -26,7 +26,7 @@ static const uint16_t SCD30_CMD_TEMPERATURE_OFFSET = 0x5403;
26
26
  static const uint16_t SCD30_CMD_SOFT_RESET = 0xD304;
27
27
 
28
28
  void SCD30Component::setup() {
29
- ESP_LOGCONFIG(TAG, "Setting up scd30...");
29
+ ESP_LOGCONFIG(TAG, "Running setup");
30
30
 
31
31
  #ifdef USE_ESP8266
32
32
  Wire.setClockStretchLimit(150000);
@@ -122,16 +122,16 @@ void SCD30Component::dump_config() {
122
122
  if (this->is_failed()) {
123
123
  switch (this->error_code_) {
124
124
  case COMMUNICATION_FAILED:
125
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
125
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
126
126
  break;
127
127
  case MEASUREMENT_INIT_FAILED:
128
- ESP_LOGW(TAG, "Measurement Initialization failed!");
128
+ ESP_LOGW(TAG, "Measurement Initialization failed");
129
129
  break;
130
130
  case FIRMWARE_IDENTIFICATION_FAILED:
131
131
  ESP_LOGW(TAG, "Unable to read sensor firmware version");
132
132
  break;
133
133
  default:
134
- ESP_LOGW(TAG, "Unknown setup error!");
134
+ ESP_LOGW(TAG, "Unknown setup error");
135
135
  break;
136
136
  }
137
137
  }
@@ -140,10 +140,13 @@ void SCD30Component::dump_config() {
140
140
  } else {
141
141
  ESP_LOGCONFIG(TAG, " Altitude compensation: %dm", this->altitude_compensation_);
142
142
  }
143
- ESP_LOGCONFIG(TAG, " Automatic self calibration: %s", ONOFF(this->enable_asc_));
144
- ESP_LOGCONFIG(TAG, " Ambient pressure compensation: %dmBar", this->ambient_pressure_compensation_);
145
- ESP_LOGCONFIG(TAG, " Temperature offset: %.2f °C", this->temperature_offset_);
146
- ESP_LOGCONFIG(TAG, " Update interval: %ds", this->update_interval_);
143
+ ESP_LOGCONFIG(TAG,
144
+ " Automatic self calibration: %s\n"
145
+ " Ambient pressure compensation: %dmBar\n"
146
+ " Temperature offset: %.2f °C\n"
147
+ " Update interval: %ds",
148
+ ONOFF(this->enable_asc_), this->ambient_pressure_compensation_, this->temperature_offset_,
149
+ this->update_interval_);
147
150
  LOG_SENSOR(" ", "CO2", this->co2_sensor_);
148
151
  LOG_SENSOR(" ", "Temperature", this->temperature_sensor_);
149
152
  LOG_SENSOR(" ", "Humidity", this->humidity_sensor_);
@@ -27,7 +27,7 @@ static const uint16_t SCD41_ID = 0x1408;
27
27
  static const uint16_t SCD40_ID = 0x440;
28
28
 
29
29
  void SCD4XComponent::setup() {
30
- ESP_LOGCONFIG(TAG, "Setting up scd4x...");
30
+ ESP_LOGCONFIG(TAG, "Running setup");
31
31
  // the sensor needs 1000 ms to enter the idle state
32
32
  this->set_timeout(1000, [this]() {
33
33
  this->status_clear_error();
@@ -96,16 +96,16 @@ void SCD4XComponent::dump_config() {
96
96
  if (this->is_failed()) {
97
97
  switch (this->error_code_) {
98
98
  case COMMUNICATION_FAILED:
99
- ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
99
+ ESP_LOGW(TAG, ESP_LOG_MSG_COMM_FAIL);
100
100
  break;
101
101
  case MEASUREMENT_INIT_FAILED:
102
- ESP_LOGW(TAG, "Measurement Initialization failed!");
102
+ ESP_LOGW(TAG, "Measurement Initialization failed");
103
103
  break;
104
104
  case SERIAL_NUMBER_IDENTIFICATION_FAILED:
105
105
  ESP_LOGW(TAG, "Unable to read sensor firmware version");
106
106
  break;
107
107
  default:
108
- ESP_LOGW(TAG, "Unknown setup error!");
108
+ ESP_LOGW(TAG, "Unknown setup error");
109
109
  break;
110
110
  }
111
111
  }
@@ -115,11 +115,15 @@ void SCD4XComponent::dump_config() {
115
115
  this->ambient_pressure_source_->get_name().c_str());
116
116
  } else {
117
117
  if (this->ambient_pressure_compensation_) {
118
- ESP_LOGCONFIG(TAG, " Altitude compensation disabled");
119
- ESP_LOGCONFIG(TAG, " Ambient pressure compensation: %dmBar", this->ambient_pressure_);
118
+ ESP_LOGCONFIG(TAG,
119
+ " Altitude compensation disabled\n"
120
+ " Ambient pressure compensation: %dmBar",
121
+ this->ambient_pressure_);
120
122
  } else {
121
- ESP_LOGCONFIG(TAG, " Ambient pressure compensation disabled");
122
- ESP_LOGCONFIG(TAG, " Altitude compensation: %dm", this->altitude_compensation_);
123
+ ESP_LOGCONFIG(TAG,
124
+ " Ambient pressure compensation disabled\n"
125
+ " Altitude compensation: %dm",
126
+ this->altitude_compensation_);
123
127
  }
124
128
  }
125
129
  switch (this->measurement_mode_) {
@@ -8,16 +8,28 @@ from esphome.const import (
8
8
  CONF_HEIGHT,
9
9
  CONF_ID,
10
10
  CONF_LAMBDA,
11
+ CONF_POSITION,
11
12
  CONF_WIDTH,
13
+ CONF_X,
14
+ CONF_Y,
12
15
  PLATFORM_HOST,
13
16
  )
14
17
 
15
18
  sdl_ns = cg.esphome_ns.namespace("sdl")
16
19
  Sdl = sdl_ns.class_("Sdl", display.Display, cg.Component)
20
+ sdl_window_flags = cg.global_ns.enum("SDL_WindowFlags")
17
21
 
18
22
 
19
23
  CONF_SDL_OPTIONS = "sdl_options"
20
24
  CONF_SDL_ID = "sdl_id"
25
+ CONF_WINDOW_OPTIONS = "window_options"
26
+ WINDOW_OPTIONS = (
27
+ "borderless",
28
+ "always_on_top",
29
+ "fullscreen",
30
+ "skip_taskbar",
31
+ "resizable",
32
+ )
21
33
 
22
34
 
23
35
  def get_sdl_options(value):
@@ -29,6 +41,10 @@ def get_sdl_options(value):
29
41
  raise cv.Invalid("Unable to run sdl2-config - have you installed sdl2?") from e
30
42
 
31
43
 
44
+ def get_window_options():
45
+ return {cv.Optional(option, default=False): cv.boolean for option in WINDOW_OPTIONS}
46
+
47
+
32
48
  CONFIG_SCHEMA = cv.All(
33
49
  display.FULL_DISPLAY_SCHEMA.extend(
34
50
  cv.Schema(
@@ -44,6 +60,17 @@ CONFIG_SCHEMA = cv.All(
44
60
  }
45
61
  ),
46
62
  ),
63
+ cv.Optional(CONF_WINDOW_OPTIONS): cv.Schema(
64
+ {
65
+ cv.Optional(CONF_POSITION): cv.Schema(
66
+ {
67
+ cv.Required(CONF_X): cv.int_,
68
+ cv.Required(CONF_Y): cv.int_,
69
+ }
70
+ ),
71
+ **get_window_options(),
72
+ }
73
+ ),
47
74
  }
48
75
  )
49
76
  ),
@@ -65,6 +92,19 @@ async def to_code(config):
65
92
  (width, height) = dimensions
66
93
  cg.add(var.set_dimensions(width, height))
67
94
 
95
+ if window_options := config.get(CONF_WINDOW_OPTIONS):
96
+ create_flags = 0
97
+ for option in WINDOW_OPTIONS:
98
+ value = window_options.get(option, False)
99
+ if value:
100
+ create_flags = create_flags | getattr(
101
+ sdl_window_flags, "SDL_WINDOW_" + option.upper()
102
+ )
103
+ cg.add(var.set_window_options(create_flags))
104
+
105
+ if position := window_options.get(CONF_POSITION):
106
+ cg.add(var.set_position(position[CONF_X], position[CONF_Y]))
107
+
68
108
  if lamb := config.get(CONF_LAMBDA):
69
109
  lambda_ = await cg.process_lambda(
70
110
  lamb, [(display.DisplayRef, "it")], return_type=cg.void
@@ -8,8 +8,8 @@ namespace sdl {
8
8
  void Sdl::setup() {
9
9
  ESP_LOGD(TAG, "Starting setup");
10
10
  SDL_Init(SDL_INIT_VIDEO);
11
- this->window_ = SDL_CreateWindow(App.get_name().c_str(), SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
12
- this->width_, this->height_, SDL_WINDOW_RESIZABLE);
11
+ this->window_ = SDL_CreateWindow(App.get_name().c_str(), this->pos_x_, this->pos_y_, this->width_, this->height_,
12
+ this->window_options_);
13
13
  this->renderer_ = SDL_CreateRenderer(this->window_, -1, SDL_RENDERER_SOFTWARE);
14
14
  SDL_RenderSetLogicalSize(this->renderer_, this->width_, this->height_);
15
15
  this->texture_ =
@@ -28,6 +28,11 @@ class Sdl : public display::Display {
28
28
  this->width_ = width;
29
29
  this->height_ = height;
30
30
  }
31
+ void set_window_options(uint32_t window_options) { this->window_options_ = window_options; }
32
+ void set_position(uint16_t pos_x, uint16_t pos_y) {
33
+ this->pos_x_ = pos_x;
34
+ this->pos_y_ = pos_y;
35
+ }
31
36
  int get_width() override { return this->width_; }
32
37
  int get_height() override { return this->height_; }
33
38
  float get_setup_priority() const override { return setup_priority::HARDWARE; }
@@ -49,6 +54,9 @@ class Sdl : public display::Display {
49
54
  void redraw_(SDL_Rect &rect);
50
55
  int width_{};
51
56
  int height_{};
57
+ uint32_t window_options_{0};
58
+ int pos_x_{SDL_WINDOWPOS_UNDEFINED};
59
+ int pos_y_{SDL_WINDOWPOS_UNDEFINED};
52
60
  SDL_Renderer *renderer_{};
53
61
  SDL_Window *window_{};
54
62
  SDL_Texture *texture_{};
@@ -1,5 +1,6 @@
1
1
  #include "sdm_meter.h"
2
2
  #include "sdm_meter_registers.h"
3
+ #include "esphome/core/helpers.h"
3
4
  #include "esphome/core/log.h"
4
5
 
5
6
  namespace esphome {
@@ -84,8 +85,10 @@ void SDMMeter::on_modbus_data(const std::vector<uint8_t> &data) {
84
85
 
85
86
  void SDMMeter::update() { this->send(MODBUS_CMD_READ_IN_REGISTERS, 0, MODBUS_REGISTER_COUNT); }
86
87
  void SDMMeter::dump_config() {
87
- ESP_LOGCONFIG(TAG, "SDM Meter:");
88
- ESP_LOGCONFIG(TAG, " Address: 0x%02X", this->address_);
88
+ ESP_LOGCONFIG(TAG,
89
+ "SDM Meter:\n"
90
+ " Address: 0x%02X",
91
+ this->address_);
89
92
  for (uint8_t i = 0; i < 3; i++) {
90
93
  auto phase = this->phases_[i];
91
94
  if (!phase.setup)
@@ -1,7 +1,7 @@
1
1
  #include "sdp3x.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 sdp3x {
@@ -17,31 +17,31 @@ static const uint16_t SDP3X_STOP_MEAS = 0x3FF9;
17
17
  void SDP3XComponent::update() { this->read_pressure_(); }
18
18
 
19
19
  void SDP3XComponent::setup() {
20
- ESP_LOGD(TAG, "Setting up SDP3X...");
20
+ ESP_LOGCONFIG(TAG, "Running setup");
21
21
 
22
22
  if (!this->write_command(SDP3X_STOP_MEAS)) {
23
- ESP_LOGW(TAG, "Stop SDP3X failed!"); // This sometimes fails for no good reason
23
+ ESP_LOGW(TAG, "Stop failed"); // This sometimes fails for no good reason
24
24
  }
25
25
 
26
26
  if (!this->write_command(SDP3X_SOFT_RESET)) {
27
- ESP_LOGW(TAG, "Soft Reset SDP3X failed!"); // This sometimes fails for no good reason
27
+ ESP_LOGW(TAG, "Soft Reset failed"); // This sometimes fails for no good reason
28
28
  }
29
29
 
30
30
  this->set_timeout(20, [this] {
31
31
  if (!this->write_command(SDP3X_READ_ID1)) {
32
- ESP_LOGE(TAG, "Read ID1 SDP3X failed!");
32
+ ESP_LOGE(TAG, "Read ID1 failed");
33
33
  this->mark_failed();
34
34
  return;
35
35
  }
36
36
  if (!this->write_command(SDP3X_READ_ID2)) {
37
- ESP_LOGE(TAG, "Read ID2 SDP3X failed!");
37
+ ESP_LOGE(TAG, "Read ID2 failed");
38
38
  this->mark_failed();
39
39
  return;
40
40
  }
41
41
 
42
42
  uint16_t data[6];
43
43
  if (!this->read_data(data, 6)) {
44
- ESP_LOGE(TAG, "Read ID SDP3X failed!");
44
+ ESP_LOGE(TAG, "Read ID failed");
45
45
  this->mark_failed();
46
46
  return;
47
47
  }
@@ -79,18 +79,18 @@ void SDP3XComponent::setup() {
79
79
  }
80
80
 
81
81
  if (!this->write_command(measurement_mode_ == DP_AVG ? SDP3X_START_DP_AVG : SDP3X_START_MASS_FLOW_AVG)) {
82
- ESP_LOGE(TAG, "Start Measurements SDP3X failed!");
82
+ ESP_LOGE(TAG, "Start Measurements failed");
83
83
  this->mark_failed();
84
84
  return;
85
85
  }
86
- ESP_LOGCONFIG(TAG, "SDP3X started!");
86
+ ESP_LOGCONFIG(TAG, "started");
87
87
  });
88
88
  }
89
89
  void SDP3XComponent::dump_config() {
90
90
  LOG_SENSOR(" ", "SDP3X", this);
91
91
  LOG_I2C_DEVICE(this);
92
92
  if (this->is_failed()) {
93
- ESP_LOGE(TAG, " Connection with SDP3X failed!");
93
+ ESP_LOGE(TAG, " Connection with failed");
94
94
  }
95
95
  LOG_UPDATE_INTERVAL(this);
96
96
  }
@@ -98,7 +98,7 @@ void SDP3XComponent::dump_config() {
98
98
  void SDP3XComponent::read_pressure_() {
99
99
  uint16_t data[3];
100
100
  if (!this->read_data(data, 3)) {
101
- ESP_LOGW(TAG, "Couldn't read SDP3X data!");
101
+ ESP_LOGW(TAG, "Couldn't read data");
102
102
  this->status_set_warning();
103
103
  return;
104
104
  }
@@ -67,9 +67,11 @@ void SDS011Component::set_working_state(bool working_state) {
67
67
  }
68
68
 
69
69
  void SDS011Component::dump_config() {
70
- ESP_LOGCONFIG(TAG, "SDS011:");
71
- ESP_LOGCONFIG(TAG, " Update Interval: %u min", this->update_interval_min_);
72
- ESP_LOGCONFIG(TAG, " RX-only mode: %s", ONOFF(this->rx_mode_only_));
70
+ ESP_LOGCONFIG(TAG,
71
+ "SDS011:\n"
72
+ " Update Interval: %u min\n"
73
+ " RX-only mode: %s",
74
+ this->update_interval_min_, ONOFF(this->rx_mode_only_));
73
75
  LOG_SENSOR(" ", "PM2.5", this->pm_2_5_sensor_);
74
76
  LOG_SENSOR(" ", "PM10.0", this->pm_10_0_sensor_);
75
77
  this->check_uart_settings(9600);
@@ -180,9 +182,6 @@ void SDS011Component::parse_data_() {
180
182
  }
181
183
  }
182
184
 
183
- uint16_t SDS011Component::get_16_bit_uint_(uint8_t start_index) const {
184
- return (uint16_t(this->data_[start_index + 1]) << 8) | uint16_t(this->data_[start_index]);
185
- }
186
185
  void SDS011Component::set_update_interval_min(uint8_t update_interval_min) {
187
186
  this->update_interval_min_ = update_interval_min;
188
187
  }
@@ -1,6 +1,7 @@
1
1
  #pragma once
2
2
 
3
3
  #include "esphome/core/component.h"
4
+ #include "esphome/core/helpers.h"
4
5
  #include "esphome/components/sensor/sensor.h"
5
6
  #include "esphome/components/uart/uart.h"
6
7
 
@@ -32,7 +33,9 @@ class SDS011Component : public Component, public uart::UARTDevice {
32
33
  uint8_t sds011_checksum_(const uint8_t *command_data, uint8_t length) const;
33
34
  optional<bool> check_byte_() const;
34
35
  void parse_data_();
35
- uint16_t get_16_bit_uint_(uint8_t start_index) const;
36
+ uint16_t get_16_bit_uint_(uint8_t start_index) const {
37
+ return encode_uint16(this->data_[start_index + 1], this->data_[start_index]);
38
+ }
36
39
 
37
40
  sensor::Sensor *pm_2_5_sensor_{nullptr};
38
41
  sensor::Sensor *pm_10_0_sensor_{nullptr};