esphome 2025.7.5__py3-none-any.whl → 2025.8.0b2__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 (752) hide show
  1. esphome/__main__.py +189 -82
  2. esphome/automation.py +2 -4
  3. esphome/build_gen/__init__.py +0 -0
  4. esphome/build_gen/platformio.py +102 -0
  5. esphome/components/a4988/a4988.cpp +0 -1
  6. esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
  7. esphome/components/absolute_humidity/sensor.py +2 -2
  8. esphome/components/adc/__init__.py +123 -85
  9. esphome/components/adc/adc_sensor.h +98 -35
  10. esphome/components/adc/adc_sensor_common.cpp +10 -4
  11. esphome/components/adc/adc_sensor_esp32.cpp +291 -123
  12. esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
  13. esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
  14. esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
  15. esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
  16. esphome/components/adc/sensor.py +61 -27
  17. esphome/components/adc128s102/adc128s102.cpp +1 -4
  18. esphome/components/ade7880/sensor.py +75 -49
  19. esphome/components/ads1115/ads1115.cpp +0 -1
  20. esphome/components/ads1118/ads1118.cpp +0 -1
  21. esphome/components/ags10/ags10.cpp +0 -4
  22. esphome/components/aht10/aht10.cpp +0 -4
  23. esphome/components/aic3204/aic3204.cpp +0 -2
  24. esphome/components/airthings_wave_plus/__init__.py +1 -1
  25. esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
  26. esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
  27. esphome/components/airthings_wave_plus/sensor.py +55 -28
  28. esphome/components/alarm_control_panel/__init__.py +4 -9
  29. esphome/components/am2315c/am2315c.cpp +0 -2
  30. esphome/components/am2320/am2320.cpp +0 -1
  31. esphome/components/animation/__init__.py +14 -11
  32. esphome/components/apds9306/apds9306.cpp +0 -4
  33. esphome/components/apds9960/apds9960.cpp +0 -1
  34. esphome/components/api/__init__.py +29 -4
  35. esphome/components/api/api_connection.cpp +378 -401
  36. esphome/components/api/api_connection.h +102 -52
  37. esphome/components/api/api_frame_helper.cpp +69 -896
  38. esphome/components/api/api_frame_helper.h +31 -126
  39. esphome/components/api/api_frame_helper_noise.cpp +583 -0
  40. esphome/components/api/api_frame_helper_noise.h +68 -0
  41. esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
  42. esphome/components/api/api_frame_helper_plaintext.h +53 -0
  43. esphome/components/api/api_noise_context.h +2 -4
  44. esphome/components/api/api_pb2.cpp +1601 -1808
  45. esphome/components/api/api_pb2.h +367 -323
  46. esphome/components/api/api_pb2_dump.cpp +1137 -3466
  47. esphome/components/api/api_pb2_includes.h +34 -0
  48. esphome/components/api/api_pb2_service.cpp +94 -105
  49. esphome/components/api/api_pb2_service.h +27 -16
  50. esphome/components/api/api_server.cpp +18 -17
  51. esphome/components/api/api_server.h +8 -5
  52. esphome/components/api/client.py +16 -8
  53. esphome/components/api/custom_api_device.h +68 -14
  54. esphome/components/api/homeassistant_service.h +24 -19
  55. esphome/components/api/list_entities.cpp +3 -5
  56. esphome/components/api/list_entities.h +2 -4
  57. esphome/components/api/proto.cpp +3 -5
  58. esphome/components/api/proto.h +239 -274
  59. esphome/components/api/subscribe_state.cpp +2 -4
  60. esphome/components/api/subscribe_state.h +2 -4
  61. esphome/components/api/user_services.cpp +2 -4
  62. esphome/components/api/user_services.h +8 -8
  63. esphome/components/as3935/as3935.cpp +0 -2
  64. esphome/components/as3935_spi/as3935_spi.cpp +0 -2
  65. esphome/components/as5600/__init__.py +1 -1
  66. esphome/components/as5600/as5600.cpp +0 -2
  67. esphome/components/as5600/sensor/__init__.py +0 -1
  68. esphome/components/as7341/as7341.cpp +0 -1
  69. esphome/components/async_tcp/__init__.py +1 -1
  70. esphome/components/at581x/at581x.cpp +1 -1
  71. esphome/components/atm90e26/atm90e26.cpp +0 -1
  72. esphome/components/atm90e32/atm90e32.cpp +488 -118
  73. esphome/components/atm90e32/atm90e32.h +44 -5
  74. esphome/components/audio/audio.h +2 -2
  75. esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
  76. esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
  77. esphome/components/bh1750/bh1750.cpp +0 -1
  78. esphome/components/binary_sensor/__init__.py +14 -12
  79. esphome/components/ble_client/__init__.py +4 -7
  80. esphome/components/bluetooth_proxy/__init__.py +40 -3
  81. esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
  82. esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
  83. esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
  84. esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
  85. esphome/components/bme280_base/bme280_base.cpp +15 -16
  86. esphome/components/bme680/bme680.cpp +2 -3
  87. esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
  88. esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
  89. esphome/components/bmi160/bmi160.cpp +0 -1
  90. esphome/components/bmp085/bmp085.cpp +0 -1
  91. esphome/components/bmp280_base/bmp280_base.cpp +13 -14
  92. esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
  93. esphome/components/bmp581/bmp581.cpp +0 -2
  94. esphome/components/bp1658cj/bp1658cj.cpp +0 -1
  95. esphome/components/bp5758d/bp5758d.cpp +0 -1
  96. esphome/components/button/__init__.py +0 -1
  97. esphome/components/canbus/__init__.py +2 -3
  98. esphome/components/canbus/canbus.cpp +0 -1
  99. esphome/components/cap1188/cap1188.cpp +0 -2
  100. esphome/components/captive_portal/__init__.py +1 -1
  101. esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
  102. esphome/components/ch422g/ch422g.cpp +0 -1
  103. esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
  104. esphome/components/climate/__init__.py +0 -1
  105. esphome/components/climate/climate_traits.h +24 -0
  106. esphome/components/cm1106/cm1106.cpp +0 -1
  107. esphome/components/const/__init__.py +6 -0
  108. esphome/components/cover/__init__.py +0 -1
  109. esphome/components/cover/cover.cpp +9 -13
  110. esphome/components/cs5460a/cs5460a.cpp +0 -2
  111. esphome/components/cse7761/cse7761.cpp +0 -1
  112. esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
  113. esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
  114. esphome/components/dac7678/dac7678_output.cpp +0 -2
  115. esphome/components/dallas_temp/dallas_temp.cpp +0 -1
  116. esphome/components/datetime/__init__.py +0 -2
  117. esphome/components/debug/__init__.py +15 -1
  118. esphome/components/debug/debug_zephyr.cpp +281 -0
  119. esphome/components/debug/sensor.py +2 -1
  120. esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
  121. esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
  122. esphome/components/dfrobot_sen0395/__init__.py +1 -2
  123. esphome/components/dht/dht.cpp +0 -1
  124. esphome/components/dht12/dht12.cpp +0 -1
  125. esphome/components/display/__init__.py +16 -3
  126. esphome/components/display_menu_base/__init__.py +1 -1
  127. esphome/components/dps310/dps310.cpp +0 -2
  128. esphome/components/ds1307/ds1307.cpp +0 -1
  129. esphome/components/ds2484/ds2484.cpp +0 -1
  130. esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
  131. esphome/components/ee895/ee895.cpp +0 -1
  132. esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
  133. esphome/components/emc2101/emc2101.cpp +0 -2
  134. esphome/components/ens160_base/ens160_base.cpp +0 -2
  135. esphome/components/ens210/ens210.cpp +0 -1
  136. esphome/components/es7210/es7210.cpp +0 -2
  137. esphome/components/es7243e/es7243e.cpp +0 -2
  138. esphome/components/es8156/es8156.cpp +0 -2
  139. esphome/components/es8311/es8311.cpp +0 -2
  140. esphome/components/es8388/es8388.cpp +0 -2
  141. esphome/components/esp32/__init__.py +199 -58
  142. esphome/components/esp32/boards.py +17 -0
  143. esphome/components/esp32/gpio.cpp +0 -1
  144. esphome/components/esp32/gpio.py +1 -2
  145. esphome/components/esp32/gpio_esp32_h2.py +2 -7
  146. esphome/components/esp32/gpio_esp32_p4.py +2 -7
  147. esphome/components/esp32/post_build.py.script +112 -61
  148. esphome/components/esp32_ble/__init__.py +40 -2
  149. esphome/components/esp32_ble/ble.cpp +12 -8
  150. esphome/components/esp32_ble/ble.h +18 -18
  151. esphome/components/esp32_ble/ble_advertising.cpp +5 -5
  152. esphome/components/esp32_ble/ble_advertising.h +7 -5
  153. esphome/components/esp32_ble/ble_event.h +2 -4
  154. esphome/components/esp32_ble/ble_scan_result.h +2 -4
  155. esphome/components/esp32_ble/ble_uuid.cpp +5 -5
  156. esphome/components/esp32_ble/ble_uuid.h +6 -5
  157. esphome/components/esp32_ble_beacon/__init__.py +4 -0
  158. esphome/components/esp32_ble_client/__init__.py +1 -1
  159. esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
  160. esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
  161. esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
  162. esphome/components/esp32_ble_client/ble_client_base.h +17 -6
  163. esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
  164. esphome/components/esp32_ble_client/ble_service.cpp +4 -4
  165. esphome/components/esp32_ble_client/ble_service.h +6 -4
  166. esphome/components/esp32_ble_server/__init__.py +15 -12
  167. esphome/components/esp32_ble_tracker/__init__.py +79 -11
  168. esphome/components/esp32_ble_tracker/automation.h +4 -4
  169. esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
  170. esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
  171. esphome/components/esp32_camera/__init__.py +13 -1
  172. esphome/components/esp32_camera/esp32_camera.cpp +7 -2
  173. esphome/components/esp32_camera/esp32_camera.h +1 -0
  174. esphome/components/esp32_dac/esp32_dac.cpp +3 -19
  175. esphome/components/esp32_dac/esp32_dac.h +4 -8
  176. esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
  177. esphome/components/esp32_rmt_led_strip/light.py +1 -1
  178. esphome/components/esp32_touch/__init__.py +2 -3
  179. esphome/components/esp32_touch/esp32_touch.h +9 -6
  180. esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
  181. esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
  182. esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
  183. esphome/components/esp8266/__init__.py +3 -1
  184. esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
  185. esphome/components/esphome/ota/__init__.py +1 -2
  186. esphome/components/esphome/ota/ota_esphome.cpp +150 -77
  187. esphome/components/esphome/ota/ota_esphome.h +8 -1
  188. esphome/components/espnow/__init__.py +309 -0
  189. esphome/components/espnow/automation.h +175 -0
  190. esphome/components/espnow/espnow_component.cpp +468 -0
  191. esphome/components/espnow/espnow_component.h +183 -0
  192. esphome/components/espnow/espnow_err.h +19 -0
  193. esphome/components/espnow/espnow_packet.h +166 -0
  194. esphome/components/ethernet/__init__.py +7 -1
  195. esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
  196. esphome/components/ethernet/ethernet_component.cpp +0 -1
  197. esphome/components/ethernet/ethernet_component.h +4 -0
  198. esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
  199. esphome/components/event/__init__.py +0 -1
  200. esphome/components/factory_reset/__init__.py +92 -0
  201. esphome/components/factory_reset/factory_reset.cpp +76 -0
  202. esphome/components/factory_reset/factory_reset.h +43 -0
  203. esphome/components/fan/__init__.py +0 -1
  204. esphome/components/fan/fan_traits.h +16 -0
  205. esphome/components/fastled_base/fastled_light.cpp +0 -1
  206. esphome/components/fastled_spi/light.py +1 -3
  207. esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
  208. esphome/components/fs3000/fs3000.cpp +0 -2
  209. esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
  210. esphome/components/ft63x6/ft63x6.cpp +0 -1
  211. esphome/components/gdk101/gdk101.cpp +0 -1
  212. esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
  213. esphome/components/gl_r01_i2c/sensor.py +1 -1
  214. esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
  215. esphome/components/gpio/switch/gpio_switch.cpp +0 -2
  216. esphome/components/gpio_expander/cached_gpio.h +24 -15
  217. esphome/components/gps/__init__.py +6 -2
  218. esphome/components/gps/gps.cpp +50 -49
  219. esphome/components/gps/gps.h +4 -8
  220. esphome/components/gps/time/gps_time.cpp +3 -9
  221. esphome/components/gps/time/gps_time.h +4 -7
  222. esphome/components/graph/__init__.py +1 -1
  223. esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
  224. esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
  225. esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
  226. esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
  227. esphome/components/haier/climate.py +5 -10
  228. esphome/components/haier/haier_base.cpp +0 -1
  229. esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
  230. esphome/components/hdc1080/hdc1080.cpp +0 -2
  231. esphome/components/heatpumpir/climate.py +2 -2
  232. esphome/components/hlw8012/hlw8012.cpp +0 -1
  233. esphome/components/hm3301/hm3301.cpp +0 -1
  234. esphome/components/hmc5883l/hmc5883l.cpp +0 -1
  235. esphome/components/homeassistant/__init__.py +1 -0
  236. esphome/components/homeassistant/number/__init__.py +1 -0
  237. esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
  238. esphome/components/homeassistant/switch/__init__.py +1 -0
  239. esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
  240. esphome/components/honeywellabp/honeywellabp.cpp +1 -4
  241. esphome/components/host/__init__.py +2 -0
  242. esphome/components/hte501/hte501.cpp +0 -1
  243. esphome/components/http_request/__init__.py +2 -3
  244. esphome/components/http_request/http_request_idf.cpp +2 -2
  245. esphome/components/htu21d/htu21d.cpp +0 -2
  246. esphome/components/htu31d/htu31d.cpp +0 -2
  247. esphome/components/hx711/hx711.cpp +0 -1
  248. esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
  249. esphome/components/hydreon_rgxx/sensor.py +4 -5
  250. esphome/components/i2c/i2c_bus.h +1 -1
  251. esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
  252. esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
  253. esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
  254. esphome/components/i2s_audio/__init__.py +6 -5
  255. esphome/components/i2s_audio/i2s_audio.cpp +0 -2
  256. esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
  257. esphome/components/i2s_audio/microphone/__init__.py +4 -6
  258. esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
  259. esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
  260. esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
  261. esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
  262. esphome/components/ili9xxx/display.py +4 -3
  263. esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
  264. esphome/components/image/__init__.py +123 -92
  265. esphome/components/improv_serial/__init__.py +7 -8
  266. esphome/components/ina219/ina219.cpp +0 -1
  267. esphome/components/ina226/ina226.cpp +0 -2
  268. esphome/components/ina260/ina260.cpp +0 -2
  269. esphome/components/ina2xx_base/__init__.py +2 -5
  270. esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
  271. esphome/components/ina3221/ina3221.cpp +0 -1
  272. esphome/components/internal_temperature/internal_temperature.cpp +0 -2
  273. esphome/components/interval/interval.h +5 -9
  274. esphome/components/json/__init__.py +1 -1
  275. esphome/components/kmeteriso/kmeteriso.cpp +0 -2
  276. esphome/components/lc709203f/lc709203f.cpp +0 -2
  277. esphome/components/lcd_gpio/display.py +1 -3
  278. esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
  279. esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
  280. esphome/components/ld2410/__init__.py +4 -6
  281. esphome/components/ld2410/binary_sensor.py +4 -0
  282. esphome/components/ld2410/ld2410.cpp +56 -100
  283. esphome/components/ld2410/ld2410.h +17 -15
  284. esphome/components/ld2410/sensor.py +24 -10
  285. esphome/components/ld2412/__init__.py +46 -0
  286. esphome/components/ld2412/binary_sensor.py +70 -0
  287. esphome/components/ld2412/button/__init__.py +74 -0
  288. esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
  289. esphome/components/ld2412/button/factory_reset_button.h +18 -0
  290. esphome/components/ld2412/button/query_button.cpp +9 -0
  291. esphome/components/ld2412/button/query_button.h +18 -0
  292. esphome/components/ld2412/button/restart_button.cpp +9 -0
  293. esphome/components/ld2412/button/restart_button.h +18 -0
  294. esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
  295. esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
  296. esphome/components/ld2412/ld2412.cpp +861 -0
  297. esphome/components/ld2412/ld2412.h +141 -0
  298. esphome/components/ld2412/number/__init__.py +126 -0
  299. esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
  300. esphome/components/ld2412/number/gate_threshold_number.h +19 -0
  301. esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
  302. esphome/components/ld2412/number/light_threshold_number.h +18 -0
  303. esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
  304. esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
  305. esphome/components/ld2412/select/__init__.py +82 -0
  306. esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
  307. esphome/components/ld2412/select/baud_rate_select.h +18 -0
  308. esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
  309. esphome/components/ld2412/select/distance_resolution_select.h +18 -0
  310. esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
  311. esphome/components/ld2412/select/light_out_control_select.h +18 -0
  312. esphome/components/ld2412/sensor.py +124 -0
  313. esphome/components/ld2412/switch/__init__.py +45 -0
  314. esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
  315. esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
  316. esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
  317. esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
  318. esphome/components/ld2412/text_sensor.py +34 -0
  319. esphome/components/ld2420/ld2420.cpp +0 -1
  320. esphome/components/ld2450/__init__.py +3 -4
  321. esphome/components/ld2450/binary_sensor.py +3 -0
  322. esphome/components/ld2450/ld2450.cpp +77 -165
  323. esphome/components/ld2450/ld2450.h +26 -54
  324. esphome/components/ld2450/sensor.py +120 -6
  325. esphome/components/ld2450/text_sensor.py +5 -4
  326. esphome/components/ld24xx/__init__.py +1 -0
  327. esphome/components/ld24xx/ld24xx.h +65 -0
  328. esphome/components/ledc/ledc_output.cpp +0 -1
  329. esphome/components/libretiny/__init__.py +2 -0
  330. esphome/components/light/__init__.py +0 -1
  331. esphome/components/light/effects.py +70 -45
  332. esphome/components/light/light_call.cpp +101 -66
  333. esphome/components/light/light_color_values.h +16 -11
  334. esphome/components/light/light_json_schema.cpp +46 -44
  335. esphome/components/light/light_state.cpp +8 -11
  336. esphome/components/light/light_traits.h +17 -0
  337. esphome/components/lightwaverf/lightwaverf.cpp +0 -2
  338. esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
  339. esphome/components/lock/__init__.py +0 -1
  340. esphome/components/logger/__init__.py +31 -9
  341. esphome/components/logger/logger.cpp +12 -7
  342. esphome/components/logger/logger.h +25 -14
  343. esphome/components/logger/logger_esp32.cpp +2 -7
  344. esphome/components/logger/logger_esp8266.cpp +2 -4
  345. esphome/components/logger/logger_host.cpp +2 -4
  346. esphome/components/logger/logger_libretiny.cpp +2 -4
  347. esphome/components/logger/logger_rp2040.cpp +2 -4
  348. esphome/components/logger/logger_zephyr.cpp +86 -0
  349. esphome/components/logger/select/logger_level_select.cpp +2 -4
  350. esphome/components/logger/select/logger_level_select.h +2 -4
  351. esphome/components/logger/task_log_buffer.cpp +2 -4
  352. esphome/components/logger/task_log_buffer.h +2 -4
  353. esphome/components/lps22/sensor.py +5 -5
  354. esphome/components/ltr390/ltr390.cpp +0 -2
  355. esphome/components/ltr501/ltr501.cpp +0 -1
  356. esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
  357. esphome/components/lvgl/__init__.py +14 -13
  358. esphome/components/lvgl/automation.py +2 -4
  359. esphome/components/lvgl/defines.py +0 -2
  360. esphome/components/lvgl/helpers.py +1 -1
  361. esphome/components/lvgl/lv_validation.py +7 -4
  362. esphome/components/lvgl/lvgl_esphome.cpp +2 -3
  363. esphome/components/lvgl/styles.py +2 -2
  364. esphome/components/lvgl/types.py +1 -1
  365. esphome/components/lvgl/widgets/__init__.py +2 -2
  366. esphome/components/lvgl/widgets/arc.py +14 -11
  367. esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
  368. esphome/components/lvgl/widgets/qrcode.py +7 -7
  369. esphome/components/lvgl/widgets/spinner.py +6 -6
  370. esphome/components/lvgl/widgets/switch.py +2 -2
  371. esphome/components/lvgl/widgets/tabview.py +3 -3
  372. esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
  373. esphome/components/matrix_keypad/__init__.py +4 -3
  374. esphome/components/max17043/max17043.cpp +0 -2
  375. esphome/components/max31855/max31855.cpp +1 -4
  376. esphome/components/max31856/max31856.cpp +0 -4
  377. esphome/components/max31865/max31865.cpp +0 -1
  378. esphome/components/max44009/max44009.cpp +0 -1
  379. esphome/components/max6675/max6675.cpp +1 -4
  380. esphome/components/max6956/max6956.cpp +0 -1
  381. esphome/components/max7219/max7219.cpp +0 -1
  382. esphome/components/max7219digit/display.py +1 -1
  383. esphome/components/max7219digit/max7219digit.cpp +0 -1
  384. esphome/components/max9611/max9611.cpp +0 -1
  385. esphome/components/mcp23008/__init__.py +1 -1
  386. esphome/components/mcp23008/mcp23008.cpp +0 -1
  387. esphome/components/mcp23016/mcp23016.cpp +0 -1
  388. esphome/components/mcp23017/__init__.py +1 -1
  389. esphome/components/mcp23017/mcp23017.cpp +0 -1
  390. esphome/components/mcp23s08/__init__.py +1 -1
  391. esphome/components/mcp23s08/mcp23s08.cpp +0 -1
  392. esphome/components/mcp23s17/__init__.py +1 -1
  393. esphome/components/mcp23s17/mcp23s17.cpp +0 -1
  394. esphome/components/mcp23x08_base/__init__.py +2 -0
  395. esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
  396. esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
  397. esphome/components/mcp23x17_base/__init__.py +2 -0
  398. esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
  399. esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
  400. esphome/components/mcp23xxx_base/__init__.py +11 -5
  401. esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
  402. esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
  403. esphome/components/mcp3008/mcp3008.cpp +1 -4
  404. esphome/components/mcp3204/mcp3204.cpp +1 -4
  405. esphome/components/mcp4461/mcp4461.cpp +0 -1
  406. esphome/components/mcp4725/mcp4725.cpp +0 -1
  407. esphome/components/mcp4728/mcp4728.cpp +0 -1
  408. esphome/components/mcp9600/mcp9600.cpp +0 -2
  409. esphome/components/mcp9808/mcp9808.cpp +0 -2
  410. esphome/components/mdns/__init__.py +3 -0
  411. esphome/components/mdns/mdns_component.cpp +2 -0
  412. esphome/components/mdns/mdns_component.h +4 -0
  413. esphome/components/media_player/__init__.py +40 -0
  414. esphome/components/media_player/automation.h +16 -0
  415. esphome/components/media_player/media_player.cpp +13 -0
  416. esphome/components/media_player/media_player.h +50 -3
  417. esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
  418. esphome/components/mics_4514/mics_4514.cpp +1 -6
  419. esphome/components/midea/ir_transmitter.h +4 -4
  420. esphome/components/mipi/__init__.py +416 -0
  421. esphome/components/mipi_dsi/__init__.py +5 -0
  422. esphome/components/mipi_dsi/display.py +233 -0
  423. esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
  424. esphome/components/mipi_dsi/mipi_dsi.h +123 -0
  425. esphome/components/mipi_dsi/models/__init__.py +0 -0
  426. esphome/components/mipi_dsi/models/guition.py +38 -0
  427. esphome/components/mipi_dsi/models/m5stack.py +57 -0
  428. esphome/components/mipi_dsi/models/waveshare.py +105 -0
  429. esphome/components/mipi_rgb/models/lilygo.py +0 -0
  430. esphome/components/mipi_spi/__init__.py +0 -9
  431. esphome/components/mipi_spi/display.py +220 -256
  432. esphome/components/mipi_spi/mipi_spi.cpp +1 -485
  433. esphome/components/mipi_spi/mipi_spi.h +556 -108
  434. esphome/components/mipi_spi/models/__init__.py +0 -65
  435. esphome/components/mipi_spi/models/adafruit.py +30 -0
  436. esphome/components/mipi_spi/models/amoled.py +41 -5
  437. esphome/components/mipi_spi/models/ili.py +5 -5
  438. esphome/components/mipi_spi/models/jc.py +1 -3
  439. esphome/components/mipi_spi/models/lilygo.py +1 -1
  440. esphome/components/mipi_spi/models/waveshare.py +16 -1
  441. esphome/components/mixer/speaker/__init__.py +4 -5
  442. esphome/components/mlx90393/sensor.py +7 -5
  443. esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
  444. esphome/components/mlx90614/mlx90614.cpp +0 -1
  445. esphome/components/mmc5603/mmc5603.cpp +0 -1
  446. esphome/components/mmc5983/mmc5983.cpp +0 -2
  447. esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
  448. esphome/components/mpr121/__init__.py +7 -6
  449. esphome/components/mpr121/mpr121.cpp +0 -1
  450. esphome/components/mpu6050/mpu6050.cpp +0 -1
  451. esphome/components/mpu6886/mpu6886.cpp +0 -1
  452. esphome/components/mqtt/__init__.py +1 -2
  453. esphome/components/mqtt/mqtt_button.cpp +1 -1
  454. esphome/components/mqtt/mqtt_client.cpp +0 -1
  455. esphome/components/mqtt/mqtt_component.cpp +8 -14
  456. esphome/components/mqtt/mqtt_component.h +0 -7
  457. esphome/components/mqtt/mqtt_sensor.cpp +0 -1
  458. esphome/components/mqtt/mqtt_sensor.h +0 -1
  459. esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
  460. esphome/components/mqtt/mqtt_text_sensor.h +0 -1
  461. esphome/components/ms5611/ms5611.cpp +0 -1
  462. esphome/components/ms8607/ms8607.cpp +0 -1
  463. esphome/components/msa3xx/msa3xx.cpp +0 -2
  464. esphome/components/my9231/my9231.cpp +0 -2
  465. esphome/components/nau7802/nau7802.cpp +0 -1
  466. esphome/components/neopixelbus/light.py +3 -0
  467. esphome/components/network/util.cpp +29 -0
  468. esphome/components/nextion/nextion.cpp +0 -1
  469. esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
  470. esphome/components/npi19/npi19.cpp +0 -2
  471. esphome/components/nrf52/__init__.py +223 -0
  472. esphome/components/nrf52/boards.py +34 -0
  473. esphome/components/nrf52/const.py +18 -0
  474. esphome/components/nrf52/gpio.py +79 -0
  475. esphome/components/number/__init__.py +2 -1
  476. esphome/components/one_wire/__init__.py +1 -2
  477. esphome/components/one_wire/one_wire.cpp +0 -2
  478. esphome/components/one_wire/one_wire.h +0 -2
  479. esphome/components/opentherm/hub.cpp +0 -1
  480. esphome/components/opentherm/number/__init__.py +2 -2
  481. esphome/components/openthread/__init__.py +2 -3
  482. esphome/components/openthread/openthread.cpp +30 -13
  483. esphome/components/openthread/openthread.h +3 -0
  484. esphome/components/openthread/openthread_esp.cpp +3 -1
  485. esphome/components/opt3001/sensor.py +2 -6
  486. esphome/components/output/__init__.py +38 -0
  487. esphome/components/output/automation.h +24 -0
  488. esphome/components/output/switch/output_switch.cpp +0 -2
  489. esphome/components/packages/__init__.py +1 -2
  490. esphome/components/packet_transport/__init__.py +4 -3
  491. esphome/components/pca6416a/pca6416a.cpp +0 -1
  492. esphome/components/pca9554/pca9554.cpp +0 -1
  493. esphome/components/pca9685/pca9685_output.cpp +0 -2
  494. esphome/components/pcf85063/pcf85063.cpp +0 -1
  495. esphome/components/pcf8563/pcf8563.cpp +0 -1
  496. esphome/components/pcf8574/pcf8574.cpp +0 -1
  497. esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
  498. esphome/components/pipsolar/sensor/__init__.py +1 -1
  499. esphome/components/pm2005/pm2005.cpp +0 -1
  500. esphome/components/pmsa003i/pmsa003i.cpp +0 -2
  501. esphome/components/pmwcs3/sensor.py +1 -2
  502. esphome/components/pn532/pn532.cpp +0 -2
  503. esphome/components/pn532_spi/pn532_spi.cpp +0 -2
  504. esphome/components/power_supply/power_supply.cpp +7 -10
  505. esphome/components/power_supply/power_supply.h +1 -1
  506. esphome/components/psram/__init__.py +6 -1
  507. esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
  508. esphome/components/pulse_counter/sensor.py +9 -6
  509. esphome/components/pylontech/pylontech.cpp +0 -1
  510. esphome/components/qmc5883l/qmc5883l.cpp +0 -1
  511. esphome/components/qmp6988/qmp6988.cpp +0 -2
  512. esphome/components/qspi_dbi/display.py +2 -3
  513. esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
  514. esphome/components/qwiic_pir/binary_sensor.py +2 -3
  515. esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
  516. esphome/components/rc522/rc522.cpp +9 -31
  517. esphome/components/rc522_spi/rc522_spi.cpp +0 -1
  518. esphome/components/remote_base/__init__.py +5 -6
  519. esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
  520. esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
  521. esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
  522. esphome/components/remote_transmitter/__init__.py +26 -0
  523. esphome/components/remote_transmitter/automation.h +18 -0
  524. esphome/components/remote_transmitter/remote_transmitter.h +2 -1
  525. esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
  526. esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
  527. esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
  528. esphome/components/resampler/speaker/__init__.py +4 -5
  529. esphome/components/rf_bridge/__init__.py +4 -8
  530. esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
  531. esphome/components/rp2040/__init__.py +3 -1
  532. esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
  533. esphome/components/rp2040_pio_led_strip/light.py +1 -2
  534. esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
  535. esphome/components/rpi_dpi_rgb/display.py +13 -15
  536. esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
  537. esphome/components/runtime_stats/__init__.py +34 -0
  538. esphome/components/runtime_stats/runtime_stats.cpp +102 -0
  539. esphome/components/runtime_stats/runtime_stats.h +132 -0
  540. esphome/components/scd30/scd30.cpp +0 -2
  541. esphome/components/scd30/sensor.py +1 -2
  542. esphome/components/scd4x/scd4x.cpp +0 -1
  543. esphome/components/scd4x/sensor.py +1 -3
  544. esphome/components/sdl/display.py +3 -1
  545. esphome/components/sdl/sdl_esphome.cpp +0 -2
  546. esphome/components/sdp3x/sdp3x.cpp +0 -2
  547. esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
  548. esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
  549. esphome/components/select/__init__.py +2 -3
  550. esphome/components/select/select_traits.cpp +1 -1
  551. esphome/components/select/select_traits.h +1 -1
  552. esphome/components/sen0321/sen0321.cpp +0 -1
  553. esphome/components/sen5x/sen5x.cpp +0 -2
  554. esphome/components/sensor/__init__.py +36 -4
  555. esphome/components/sensor/filter.cpp +49 -10
  556. esphome/components/sensor/filter.h +22 -7
  557. esphome/components/sensor/sensor.cpp +0 -1
  558. esphome/components/sensor/sensor.h +0 -9
  559. esphome/components/sfa30/sfa30.cpp +0 -4
  560. esphome/components/sgp30/sgp30.cpp +0 -2
  561. esphome/components/sgp4x/sensor.py +1 -1
  562. esphome/components/sgp4x/sgp4x.cpp +0 -2
  563. esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
  564. esphome/components/sht3xd/sht3xd.cpp +0 -2
  565. esphome/components/sht4x/sht4x.cpp +0 -2
  566. esphome/components/shtcx/shtcx.cpp +0 -1
  567. esphome/components/sim800l/__init__.py +2 -4
  568. esphome/components/sm16716/sm16716.cpp +0 -1
  569. esphome/components/sm2135/sm2135.cpp +0 -1
  570. esphome/components/sm2235/sm2235.cpp +0 -1
  571. esphome/components/sm2335/sm2335.cpp +0 -1
  572. esphome/components/sn74hc165/sn74hc165.cpp +0 -1
  573. esphome/components/sn74hc595/sn74hc595.cpp +0 -1
  574. esphome/components/sntp/sntp_component.cpp +0 -1
  575. esphome/components/sound_level/sensor.py +1 -1
  576. esphome/components/speaker/media_player/__init__.py +21 -33
  577. esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
  578. esphome/components/spi/__init__.py +29 -13
  579. esphome/components/spi/spi.cpp +0 -2
  580. esphome/components/spi_device/spi_device.cpp +1 -4
  581. esphome/components/sprinkler/__init__.py +4 -4
  582. esphome/components/sps30/sps30.cpp +0 -1
  583. esphome/components/ssd1306_base/__init__.py +11 -11
  584. esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
  585. esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
  586. esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
  587. esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
  588. esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
  589. esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
  590. esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
  591. esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
  592. esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
  593. esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
  594. esphome/components/st7567_spi/st7567_spi.cpp +0 -1
  595. esphome/components/st7701s/display.py +10 -14
  596. esphome/components/st7701s/st7701s.cpp +0 -3
  597. esphome/components/st7735/st7735.cpp +0 -1
  598. esphome/components/st7789v/st7789v.cpp +0 -1
  599. esphome/components/st7920/st7920.cpp +0 -1
  600. esphome/components/status_led/light/status_led_light.cpp +0 -2
  601. esphome/components/status_led/status_led.cpp +0 -1
  602. esphome/components/stepper/__init__.py +2 -4
  603. esphome/components/sts3x/sts3x.cpp +0 -1
  604. esphome/components/substitutions/__init__.py +10 -16
  605. esphome/components/substitutions/jinja.py +24 -1
  606. esphome/components/sun/__init__.py +2 -3
  607. esphome/components/switch/__init__.py +31 -1
  608. esphome/components/switch/automation.h +24 -0
  609. esphome/components/switch/switch.cpp +8 -0
  610. esphome/components/switch/switch.h +8 -0
  611. esphome/components/sx126x/sx126x.cpp +0 -2
  612. esphome/components/sx127x/sx127x.cpp +0 -2
  613. esphome/components/sx1509/__init__.py +7 -5
  614. esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
  615. esphome/components/sx1509/sx1509.cpp +0 -2
  616. esphome/components/syslog/esphome_syslog.cpp +1 -1
  617. esphome/components/tc74/tc74.cpp +0 -1
  618. esphome/components/tca9548a/tca9548a.cpp +0 -1
  619. esphome/components/tca9555/tca9555.cpp +0 -1
  620. esphome/components/tcs34725/tcs34725.cpp +0 -1
  621. esphome/components/tee501/tee501.cpp +0 -1
  622. esphome/components/tem3200/tem3200.cpp +0 -2
  623. esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
  624. esphome/components/template/cover/template_cover.cpp +0 -1
  625. esphome/components/template/select/template_select.cpp +0 -1
  626. esphome/components/template/text/template_text.cpp +0 -2
  627. esphome/components/template/valve/template_valve.cpp +0 -1
  628. esphome/components/text/__init__.py +0 -1
  629. esphome/components/text/text_traits.h +2 -0
  630. esphome/components/text_sensor/__init__.py +2 -1
  631. esphome/components/text_sensor/text_sensor.cpp +0 -2
  632. esphome/components/text_sensor/text_sensor.h +0 -8
  633. esphome/components/thermostat/climate.py +4 -4
  634. esphome/components/time/__init__.py +7 -4
  635. esphome/components/time/real_time_clock.cpp +16 -3
  636. esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
  637. esphome/components/tlc5947/tlc5947.cpp +0 -2
  638. esphome/components/tlc5971/tlc5971.cpp +0 -2
  639. esphome/components/tm1621/tm1621.cpp +0 -2
  640. esphome/components/tm1637/tm1637.cpp +0 -2
  641. esphome/components/tm1638/tm1638.cpp +0 -2
  642. esphome/components/tm1651/__init__.py +45 -48
  643. esphome/components/tm1651/tm1651.cpp +213 -47
  644. esphome/components/tm1651/tm1651.h +37 -32
  645. esphome/components/tmp117/tmp117.cpp +0 -2
  646. esphome/components/tsl2561/tsl2561.cpp +0 -1
  647. esphome/components/tsl2591/tsl2591.cpp +0 -1
  648. esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
  649. esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
  650. esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
  651. esphome/components/tuya/climate/__init__.py +9 -10
  652. esphome/components/tuya/number/__init__.py +8 -6
  653. esphome/components/tx20/tx20.cpp +0 -1
  654. esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
  655. esphome/components/uart/uart_component_esp8266.cpp +0 -1
  656. esphome/components/uart/uart_component_esp_idf.cpp +0 -2
  657. esphome/components/uart/uart_component_libretiny.cpp +0 -2
  658. esphome/components/uart/uart_component_rp2040.cpp +0 -2
  659. esphome/components/udp/__init__.py +1 -1
  660. esphome/components/ufire_ec/sensor.py +1 -2
  661. esphome/components/ufire_ec/ufire_ec.cpp +0 -2
  662. esphome/components/ufire_ise/sensor.py +1 -2
  663. esphome/components/ufire_ise/ufire_ise.cpp +0 -2
  664. esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
  665. esphome/components/update/__init__.py +0 -1
  666. esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
  667. esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
  668. esphome/components/usb_host/usb_host_client.cpp +0 -1
  669. esphome/components/usb_host/usb_host_component.cpp +0 -1
  670. esphome/components/valve/__init__.py +0 -1
  671. esphome/components/veml3235/veml3235.cpp +0 -3
  672. esphome/components/veml7700/veml7700.cpp +0 -2
  673. esphome/components/version/version_text_sensor.cpp +0 -1
  674. esphome/components/version/version_text_sensor.h +0 -1
  675. esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
  676. esphome/components/voice_assistant/voice_assistant.cpp +9 -8
  677. esphome/components/web_server/__init__.py +13 -0
  678. esphome/components/web_server/web_server.cpp +187 -352
  679. esphome/components/web_server/web_server.h +61 -1
  680. esphome/components/web_server_base/__init__.py +1 -1
  681. esphome/components/web_server_base/web_server_base.cpp +2 -0
  682. esphome/components/web_server_base/web_server_base.h +6 -0
  683. esphome/components/web_server_idf/web_server_idf.cpp +10 -8
  684. esphome/components/web_server_idf/web_server_idf.h +2 -0
  685. esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
  686. esphome/components/weikai_spi/weikai_spi.cpp +1 -1
  687. esphome/components/wifi/__init__.py +8 -43
  688. esphome/components/wifi/wifi_component.cpp +100 -36
  689. esphome/components/wifi/wifi_component.h +5 -1
  690. esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
  691. esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
  692. esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
  693. esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
  694. esphome/components/wireguard/wireguard.cpp +0 -2
  695. esphome/components/x9c/x9c.cpp +0 -2
  696. esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
  697. esphome/components/xl9535/xl9535.cpp +0 -2
  698. esphome/components/zephyr/__init__.py +252 -0
  699. esphome/components/zephyr/const.py +16 -0
  700. esphome/components/zephyr/core.cpp +90 -0
  701. esphome/components/zephyr/gpio.cpp +120 -0
  702. esphome/components/zephyr/gpio.h +38 -0
  703. esphome/components/zephyr/pre_build.py.script +4 -0
  704. esphome/components/zephyr/preferences.cpp +156 -0
  705. esphome/components/zephyr/preferences.h +13 -0
  706. esphome/config.py +38 -16
  707. esphome/config_helpers.py +1 -2
  708. esphome/config_validation.py +12 -16
  709. esphome/const.py +26 -1
  710. esphome/core/__init__.py +88 -51
  711. esphome/core/application.cpp +75 -21
  712. esphome/core/application.h +106 -171
  713. esphome/core/color.h +10 -0
  714. esphome/core/component.cpp +41 -25
  715. esphome/core/component.h +9 -6
  716. esphome/core/component_iterator.cpp +61 -261
  717. esphome/core/component_iterator.h +15 -0
  718. esphome/core/config.py +26 -11
  719. esphome/core/defines.h +40 -2
  720. esphome/core/entity_base.h +18 -0
  721. esphome/core/entity_helpers.py +45 -10
  722. esphome/core/helpers.cpp +8 -15
  723. esphome/core/helpers.h +60 -6
  724. esphome/core/lock_free_queue.h +1 -1
  725. esphome/core/scheduler.cpp +277 -74
  726. esphome/core/scheduler.h +89 -27
  727. esphome/cpp_generator.py +2 -6
  728. esphome/cpp_helpers.py +1 -1
  729. esphome/dashboard/dashboard.py +2 -3
  730. esphome/dashboard/dns.py +2 -8
  731. esphome/dashboard/web_server.py +34 -19
  732. esphome/espota2.py +1 -4
  733. esphome/git.py +3 -1
  734. esphome/helpers.py +23 -4
  735. esphome/log.py +3 -1
  736. esphome/mqtt.py +3 -5
  737. esphome/platformio_api.py +7 -4
  738. esphome/types.py +12 -0
  739. esphome/util.py +20 -8
  740. esphome/voluptuous_schema.py +4 -3
  741. esphome/vscode.py +1 -2
  742. esphome/wizard.py +1 -4
  743. esphome/writer.py +5 -107
  744. esphome/yaml_util.py +7 -5
  745. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/METADATA +13 -14
  746. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/RECORD +751 -671
  747. esphome/components/mipi_spi/models/commands.py +0 -82
  748. /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
  749. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/WHEEL +0 -0
  750. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/entry_points.txt +0 -0
  751. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/licenses/LICENSE +0 -0
  752. {esphome-2025.7.5.dist-info → esphome-2025.8.0b2.dist-info}/top_level.txt +0 -0
@@ -2,10 +2,11 @@
2
2
 
3
3
  #include <array>
4
4
  #include <cstdint>
5
+ #include <cstring>
6
+ #include <limits>
5
7
  #include "esphome/core/hal.h"
6
8
 
7
- namespace esphome {
8
- namespace gpio_expander {
9
+ namespace esphome::gpio_expander {
9
10
 
10
11
  /// @brief A class to cache the read state of a GPIO expander.
11
12
  /// This class caches reads between GPIO Pins which are on the same bank.
@@ -17,12 +18,22 @@ namespace gpio_expander {
17
18
  /// N - Number of pins
18
19
  template<typename T, T N> class CachedGpioExpander {
19
20
  public:
21
+ /// @brief Read the state of the given pin. This will invalidate the cache for the given pin number.
22
+ /// @param pin Pin number to read
23
+ /// @return Pin state
20
24
  bool digital_read(T pin) {
21
- uint8_t bank = pin / (sizeof(T) * BITS_PER_BYTE);
22
- if (this->read_cache_invalidated_[bank]) {
23
- this->read_cache_invalidated_[bank] = false;
25
+ const uint8_t bank = pin / BANK_SIZE;
26
+ const T pin_mask = (1 << (pin % BANK_SIZE));
27
+ // Check if specific pin cache is valid
28
+ if (this->read_cache_valid_[bank] & pin_mask) {
29
+ // Invalidate pin
30
+ this->read_cache_valid_[bank] &= ~pin_mask;
31
+ } else {
32
+ // Read whole bank from hardware
24
33
  if (!this->digital_read_hw(pin))
25
34
  return false;
35
+ // Mark bank cache as valid except the pin that is being returned now
36
+ this->read_cache_valid_[bank] = std::numeric_limits<T>::max() & ~pin_mask;
26
37
  }
27
38
  return this->digital_read_cache(pin);
28
39
  }
@@ -36,18 +47,16 @@ template<typename T, T N> class CachedGpioExpander {
36
47
  virtual bool digital_read_cache(T pin) = 0;
37
48
  /// @brief Call component low level function to write GPIO state to device
38
49
  virtual void digital_write_hw(T pin, bool value) = 0;
39
- const uint8_t cache_byte_size_ = N / (sizeof(T) * BITS_PER_BYTE);
40
50
 
41
51
  /// @brief Invalidate cache. This function should be called in component loop().
42
- void reset_pin_cache_() {
43
- for (T i = 0; i < this->cache_byte_size_; i++) {
44
- this->read_cache_invalidated_[i] = true;
45
- }
46
- }
52
+ void reset_pin_cache_() { memset(this->read_cache_valid_, 0x00, CACHE_SIZE_BYTES); }
53
+
54
+ static constexpr uint8_t BITS_PER_BYTE = 8;
55
+ static constexpr uint8_t BANK_SIZE = sizeof(T) * BITS_PER_BYTE;
56
+ static constexpr size_t BANKS = N / BANK_SIZE;
57
+ static constexpr size_t CACHE_SIZE_BYTES = BANKS * sizeof(T);
47
58
 
48
- static const uint8_t BITS_PER_BYTE = 8;
49
- std::array<bool, N / (sizeof(T) * BITS_PER_BYTE)> read_cache_invalidated_{};
59
+ T read_cache_valid_[BANKS]{0};
50
60
  };
51
61
 
52
- } // namespace gpio_expander
53
- } // namespace esphome
62
+ } // namespace esphome::gpio_expander
@@ -84,7 +84,6 @@ CONFIG_SCHEMA = cv.All(
84
84
  )
85
85
  .extend(cv.polling_component_schema("20s"))
86
86
  .extend(uart.UART_DEVICE_SCHEMA),
87
- cv.only_with_arduino,
88
87
  )
89
88
  FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema("gps", require_rx=True)
90
89
 
@@ -123,4 +122,9 @@ async def to_code(config):
123
122
  cg.add(var.set_hdop_sensor(sens))
124
123
 
125
124
  # https://platformio.org/lib/show/1655/TinyGPSPlus
126
- cg.add_library("mikalhart/TinyGPSPlus", "1.1.0")
125
+ # Using fork of TinyGPSPlus patched to build on ESP-IDF
126
+ cg.add_library(
127
+ "TinyGPSPlus",
128
+ None,
129
+ "https://github.com/esphome/TinyGPSPlus.git#v1.1.0",
130
+ )
@@ -1,5 +1,3 @@
1
- #ifdef USE_ARDUINO
2
-
3
1
  #include "gps.h"
4
2
  #include "esphome/core/log.h"
5
3
 
@@ -22,73 +20,76 @@ void GPS::dump_config() {
22
20
  }
23
21
 
24
22
  void GPS::update() {
25
- if (this->latitude_sensor_ != nullptr)
23
+ if (this->latitude_sensor_ != nullptr) {
26
24
  this->latitude_sensor_->publish_state(this->latitude_);
25
+ }
27
26
 
28
- if (this->longitude_sensor_ != nullptr)
27
+ if (this->longitude_sensor_ != nullptr) {
29
28
  this->longitude_sensor_->publish_state(this->longitude_);
29
+ }
30
30
 
31
- if (this->speed_sensor_ != nullptr)
31
+ if (this->speed_sensor_ != nullptr) {
32
32
  this->speed_sensor_->publish_state(this->speed_);
33
+ }
33
34
 
34
- if (this->course_sensor_ != nullptr)
35
+ if (this->course_sensor_ != nullptr) {
35
36
  this->course_sensor_->publish_state(this->course_);
37
+ }
36
38
 
37
- if (this->altitude_sensor_ != nullptr)
39
+ if (this->altitude_sensor_ != nullptr) {
38
40
  this->altitude_sensor_->publish_state(this->altitude_);
41
+ }
39
42
 
40
- if (this->satellites_sensor_ != nullptr)
43
+ if (this->satellites_sensor_ != nullptr) {
41
44
  this->satellites_sensor_->publish_state(this->satellites_);
45
+ }
42
46
 
43
- if (this->hdop_sensor_ != nullptr)
47
+ if (this->hdop_sensor_ != nullptr) {
44
48
  this->hdop_sensor_->publish_state(this->hdop_);
49
+ }
45
50
  }
46
51
 
47
52
  void GPS::loop() {
48
53
  while (this->available() > 0 && !this->has_time_) {
49
- if (this->tiny_gps_.encode(this->read())) {
50
- if (this->tiny_gps_.location.isUpdated()) {
51
- this->latitude_ = this->tiny_gps_.location.lat();
52
- this->longitude_ = this->tiny_gps_.location.lng();
53
-
54
- ESP_LOGD(TAG, "Location:");
55
- ESP_LOGD(TAG, " Lat: %.6f °", this->latitude_);
56
- ESP_LOGD(TAG, " Lon: %.6f °", this->longitude_);
57
- }
58
-
59
- if (this->tiny_gps_.speed.isUpdated()) {
60
- this->speed_ = this->tiny_gps_.speed.kmph();
61
- ESP_LOGD(TAG, "Speed: %.3f km/h", this->speed_);
62
- }
63
-
64
- if (this->tiny_gps_.course.isUpdated()) {
65
- this->course_ = this->tiny_gps_.course.deg();
66
- ESP_LOGD(TAG, "Course: %.2f °", this->course_);
67
- }
68
-
69
- if (this->tiny_gps_.altitude.isUpdated()) {
70
- this->altitude_ = this->tiny_gps_.altitude.meters();
71
- ESP_LOGD(TAG, "Altitude: %.2f m", this->altitude_);
72
- }
73
-
74
- if (this->tiny_gps_.satellites.isUpdated()) {
75
- this->satellites_ = this->tiny_gps_.satellites.value();
76
- ESP_LOGD(TAG, "Satellites: %d", this->satellites_);
77
- }
78
-
79
- if (this->tiny_gps_.hdop.isUpdated()) {
80
- this->hdop_ = this->tiny_gps_.hdop.hdop();
81
- ESP_LOGD(TAG, "HDOP: %.3f", this->hdop_);
82
- }
83
-
84
- for (auto *listener : this->listeners_) {
85
- listener->on_update(this->tiny_gps_);
86
- }
54
+ if (!this->tiny_gps_.encode(this->read())) {
55
+ continue;
56
+ }
57
+ if (this->tiny_gps_.location.isUpdated()) {
58
+ this->latitude_ = this->tiny_gps_.location.lat();
59
+ this->longitude_ = this->tiny_gps_.location.lng();
60
+ ESP_LOGV(TAG, "Latitude, Longitude: %.6f°, %.6f°", this->latitude_, this->longitude_);
61
+ }
62
+
63
+ if (this->tiny_gps_.speed.isUpdated()) {
64
+ this->speed_ = this->tiny_gps_.speed.kmph();
65
+ ESP_LOGV(TAG, "Speed: %.3f km/h", this->speed_);
66
+ }
67
+
68
+ if (this->tiny_gps_.course.isUpdated()) {
69
+ this->course_ = this->tiny_gps_.course.deg();
70
+ ESP_LOGV(TAG, "Course: %.2f°", this->course_);
71
+ }
72
+
73
+ if (this->tiny_gps_.altitude.isUpdated()) {
74
+ this->altitude_ = this->tiny_gps_.altitude.meters();
75
+ ESP_LOGV(TAG, "Altitude: %.2f m", this->altitude_);
76
+ }
77
+
78
+ if (this->tiny_gps_.satellites.isUpdated()) {
79
+ this->satellites_ = this->tiny_gps_.satellites.value();
80
+ ESP_LOGV(TAG, "Satellites: %d", this->satellites_);
81
+ }
82
+
83
+ if (this->tiny_gps_.hdop.isUpdated()) {
84
+ this->hdop_ = this->tiny_gps_.hdop.hdop();
85
+ ESP_LOGV(TAG, "HDOP: %.3f", this->hdop_);
86
+ }
87
+
88
+ for (auto *listener : this->listeners_) {
89
+ listener->on_update(this->tiny_gps_);
87
90
  }
88
91
  }
89
92
  }
90
93
 
91
94
  } // namespace gps
92
95
  } // namespace esphome
93
-
94
- #endif // USE_ARDUINO
@@ -1,10 +1,8 @@
1
1
  #pragma once
2
2
 
3
- #ifdef USE_ARDUINO
4
-
5
- #include "esphome/core/component.h"
6
- #include "esphome/components/uart/uart.h"
7
3
  #include "esphome/components/sensor/sensor.h"
4
+ #include "esphome/components/uart/uart.h"
5
+ #include "esphome/core/component.h"
8
6
  #include <TinyGPSPlus.h>
9
7
 
10
8
  #include <vector>
@@ -53,8 +51,9 @@ class GPS : public PollingComponent, public uart::UARTDevice {
53
51
  float speed_{NAN};
54
52
  float course_{NAN};
55
53
  float altitude_{NAN};
56
- uint16_t satellites_{0};
57
54
  float hdop_{NAN};
55
+ uint16_t satellites_{0};
56
+ bool has_time_{false};
58
57
 
59
58
  sensor::Sensor *latitude_sensor_{nullptr};
60
59
  sensor::Sensor *longitude_sensor_{nullptr};
@@ -64,12 +63,9 @@ class GPS : public PollingComponent, public uart::UARTDevice {
64
63
  sensor::Sensor *satellites_sensor_{nullptr};
65
64
  sensor::Sensor *hdop_sensor_{nullptr};
66
65
 
67
- bool has_time_{false};
68
66
  TinyGPSPlus tiny_gps_;
69
67
  std::vector<GPSListener *> listeners_{};
70
68
  };
71
69
 
72
70
  } // namespace gps
73
71
  } // namespace esphome
74
-
75
- #endif // USE_ARDUINO
@@ -1,5 +1,3 @@
1
- #ifdef USE_ARDUINO
2
-
3
1
  #include "gps_time.h"
4
2
  #include "esphome/core/log.h"
5
3
 
@@ -9,12 +7,10 @@ namespace gps {
9
7
  static const char *const TAG = "gps.time";
10
8
 
11
9
  void GPSTime::from_tiny_gps_(TinyGPSPlus &tiny_gps) {
12
- if (!tiny_gps.time.isValid() || !tiny_gps.date.isValid())
13
- return;
14
- if (!tiny_gps.time.isUpdated() || !tiny_gps.date.isUpdated())
15
- return;
16
- if (tiny_gps.date.year() < 2019)
10
+ if (!tiny_gps.time.isValid() || !tiny_gps.date.isValid() || !tiny_gps.time.isUpdated() ||
11
+ !tiny_gps.date.isUpdated() || tiny_gps.date.year() < 2025) {
17
12
  return;
13
+ }
18
14
 
19
15
  ESPTime val{};
20
16
  val.year = tiny_gps.date.year();
@@ -34,5 +30,3 @@ void GPSTime::from_tiny_gps_(TinyGPSPlus &tiny_gps) {
34
30
 
35
31
  } // namespace gps
36
32
  } // namespace esphome
37
-
38
- #endif // USE_ARDUINO
@@ -1,10 +1,8 @@
1
1
  #pragma once
2
2
 
3
- #ifdef USE_ARDUINO
4
-
5
- #include "esphome/core/component.h"
6
- #include "esphome/components/time/real_time_clock.h"
7
3
  #include "esphome/components/gps/gps.h"
4
+ #include "esphome/components/time/real_time_clock.h"
5
+ #include "esphome/core/component.h"
8
6
 
9
7
  namespace esphome {
10
8
  namespace gps {
@@ -13,8 +11,9 @@ class GPSTime : public time::RealTimeClock, public GPSListener {
13
11
  public:
14
12
  void update() override { this->from_tiny_gps_(this->get_tiny_gps()); };
15
13
  void on_update(TinyGPSPlus &tiny_gps) override {
16
- if (!this->has_time_)
14
+ if (!this->has_time_) {
17
15
  this->from_tiny_gps_(tiny_gps);
16
+ }
18
17
  }
19
18
 
20
19
  protected:
@@ -24,5 +23,3 @@ class GPSTime : public time::RealTimeClock, public GPSListener {
24
23
 
25
24
  } // namespace gps
26
25
  } // namespace esphome
27
-
28
- #endif // USE_ARDUINO
@@ -116,7 +116,7 @@ GRAPH_SCHEMA = cv.Schema(
116
116
 
117
117
 
118
118
  def _relocate_fields_to_subfolder(config, subfolder, subschema):
119
- fields = [k.schema for k in subschema.schema.keys()]
119
+ fields = [k.schema for k in subschema.schema]
120
120
  fields.remove(CONF_ID)
121
121
  if subfolder in config:
122
122
  # Ensure no ambiguous fields in base of config
@@ -33,7 +33,6 @@ bool GroveGasMultichannelV2Component::read_sensor_(uint8_t address, sensor::Sens
33
33
  }
34
34
 
35
35
  void GroveGasMultichannelV2Component::setup() {
36
- ESP_LOGCONFIG(TAG, "Running setup");
37
36
  // Before reading sensor values, must preheat sensor
38
37
  if (!(this->write_bytes(GROVE_GAS_MC_V2_HEAT_ON, {}))) {
39
38
  this->mark_failed();
@@ -24,7 +24,6 @@ void GroveMotorDriveTB6612FNG::dump_config() {
24
24
  }
25
25
 
26
26
  void GroveMotorDriveTB6612FNG::setup() {
27
- ESP_LOGCONFIG(TAG, "Running setup");
28
27
  if (!this->standby()) {
29
28
  this->mark_failed();
30
29
  return;
@@ -20,13 +20,11 @@ static const size_t MAX_BUTTONS = 4; // max number of buttons scanned
20
20
 
21
21
  #define ERROR_CHECK(err) \
22
22
  if ((err) != i2c::ERROR_OK) { \
23
- this->status_set_warning("Communication failure"); \
23
+ this->status_set_warning(ESP_LOG_MSG_COMM_FAIL); \
24
24
  return; \
25
25
  }
26
26
 
27
27
  void GT911Touchscreen::setup() {
28
- i2c::ErrorCode err;
29
- ESP_LOGCONFIG(TAG, "Running setup");
30
28
  if (this->reset_pin_ != nullptr) {
31
29
  this->reset_pin_->setup();
32
30
  this->reset_pin_->digital_write(false);
@@ -36,9 +34,14 @@ void GT911Touchscreen::setup() {
36
34
  this->interrupt_pin_->digital_write(false);
37
35
  }
38
36
  delay(2);
39
- this->reset_pin_->digital_write(true);
40
- delay(50); // NOLINT
37
+ this->reset_pin_->digital_write(true); // wait 50ms after reset
38
+ this->set_timeout(50, [this] { this->setup_internal_(); });
39
+ return;
41
40
  }
41
+ this->setup_internal_();
42
+ }
43
+
44
+ void GT911Touchscreen::setup_internal_() {
42
45
  if (this->interrupt_pin_ != nullptr) {
43
46
  // set pre-configured input mode
44
47
  this->interrupt_pin_->setup();
@@ -46,7 +49,7 @@ void GT911Touchscreen::setup() {
46
49
 
47
50
  // check the configuration of the int line.
48
51
  uint8_t data[4];
49
- err = this->write(GET_SWITCHES, sizeof(GET_SWITCHES));
52
+ i2c::ErrorCode err = this->write(GET_SWITCHES, sizeof(GET_SWITCHES));
50
53
  if (err != i2c::ERROR_OK && this->address_ == PRIMARY_ADDRESS) {
51
54
  this->address_ = SECONDARY_ADDRESS;
52
55
  err = this->write(GET_SWITCHES, sizeof(GET_SWITCHES));
@@ -54,7 +57,7 @@ void GT911Touchscreen::setup() {
54
57
  if (err == i2c::ERROR_OK) {
55
58
  err = this->read(data, 1);
56
59
  if (err == i2c::ERROR_OK) {
57
- ESP_LOGD(TAG, "Read from switches at address 0x%02X: 0x%02X", this->address_, data[0]);
60
+ ESP_LOGD(TAG, "Switches ADDR: 0x%02X DATA: 0x%02X", this->address_, data[0]);
58
61
  if (this->interrupt_pin_ != nullptr) {
59
62
  this->attach_interrupt_(this->interrupt_pin_,
60
63
  (data[0] & 1) ? gpio::INTERRUPT_FALLING_EDGE : gpio::INTERRUPT_RISING_EDGE);
@@ -76,18 +79,24 @@ void GT911Touchscreen::setup() {
76
79
  }
77
80
  }
78
81
  if (err != i2c::ERROR_OK) {
79
- this->mark_failed("Failed to read calibration");
82
+ this->mark_failed("Calibration error");
80
83
  return;
81
84
  }
82
85
  }
86
+
83
87
  if (err != i2c::ERROR_OK) {
84
- this->mark_failed("Failed to communicate");
88
+ this->mark_failed(ESP_LOG_MSG_COMM_FAIL);
89
+ return;
85
90
  }
86
-
87
- ESP_LOGCONFIG(TAG, "GT911 Touchscreen setup complete");
91
+ this->setup_done_ = true;
88
92
  }
89
93
 
90
94
  void GT911Touchscreen::update_touches() {
95
+ this->skip_update_ = true; // skip send touch events by default, set to false after successful error checks
96
+ if (!this->setup_done_) {
97
+ return;
98
+ }
99
+
91
100
  i2c::ErrorCode err;
92
101
  uint8_t touch_state = 0;
93
102
  uint8_t data[MAX_TOUCHES + 1][8]; // 8 bytes each for each point, plus extra space for the key byte
@@ -100,7 +109,6 @@ void GT911Touchscreen::update_touches() {
100
109
  uint8_t num_of_touches = touch_state & 0x07;
101
110
 
102
111
  if ((touch_state & 0x80) == 0 || num_of_touches > MAX_TOUCHES) {
103
- this->skip_update_ = true; // skip send touch events, touchscreen is not ready yet.
104
112
  return;
105
113
  }
106
114
 
@@ -110,6 +118,7 @@ void GT911Touchscreen::update_touches() {
110
118
  err = this->read(data[0], sizeof(data[0]) * num_of_touches + 1);
111
119
  ERROR_CHECK(err);
112
120
 
121
+ this->skip_update_ = false; // All error checks passed, send touch events
113
122
  for (uint8_t i = 0; i != num_of_touches; i++) {
114
123
  uint16_t id = data[i][0];
115
124
  uint16_t x = encode_uint16(data[i][2], data[i][1]);
@@ -15,8 +15,20 @@ class GT911ButtonListener {
15
15
 
16
16
  class GT911Touchscreen : public touchscreen::Touchscreen, public i2c::I2CDevice {
17
17
  public:
18
+ /// @brief Initialize the GT911 touchscreen.
19
+ ///
20
+ /// If @ref reset_pin_ is set, the touchscreen will be hardware reset,
21
+ /// and the rest of the setup will be scheduled to run 50ms later using @ref set_timeout()
22
+ /// to allow the device to stabilize after reset.
23
+ ///
24
+ /// If @ref interrupt_pin_ is set, it will be temporarily configured during reset
25
+ /// to control I2C address selection.
26
+ ///
27
+ /// After the timeout, or immediately if no reset is performed, @ref setup_internal_()
28
+ /// is called to complete the initialization.
18
29
  void setup() override;
19
30
  void dump_config() override;
31
+ bool can_proceed() override { return this->setup_done_; }
20
32
 
21
33
  void set_interrupt_pin(InternalGPIOPin *pin) { this->interrupt_pin_ = pin; }
22
34
  void set_reset_pin(GPIOPin *pin) { this->reset_pin_ = pin; }
@@ -25,8 +37,20 @@ class GT911Touchscreen : public touchscreen::Touchscreen, public i2c::I2CDevice
25
37
  protected:
26
38
  void update_touches() override;
27
39
 
28
- InternalGPIOPin *interrupt_pin_{};
29
- GPIOPin *reset_pin_{};
40
+ /// @brief Perform the internal setup routine for the GT911 touchscreen.
41
+ ///
42
+ /// This function checks the I2C address, configures the interrupt pin (if available),
43
+ /// reads the touchscreen mode from the controller, and attempts to read calibration
44
+ /// data (maximum X and Y values) if not already set.
45
+ ///
46
+ /// On success, sets @ref setup_done_ to true.
47
+ /// On failure, calls @ref mark_failed() with an appropriate error message.
48
+ void setup_internal_();
49
+ /// @brief True if the touchscreen setup has completed successfully.
50
+ bool setup_done_{false};
51
+
52
+ InternalGPIOPin *interrupt_pin_{nullptr};
53
+ GPIOPin *reset_pin_{nullptr};
30
54
  std::vector<GT911ButtonListener *> button_listeners_;
31
55
  uint8_t button_state_{0xFF}; // last button state. Initial FF guarantees first update.
32
56
  };
@@ -330,8 +330,7 @@ HAIER_HON_BASE_ACTION_SCHEMA = automation.maybe_simple_id(
330
330
  )
331
331
  async def display_action_to_code(config, action_id, template_arg, args):
332
332
  paren = await cg.get_variable(config[CONF_ID])
333
- var = cg.new_Pvariable(action_id, template_arg, paren)
334
- return var
333
+ return cg.new_Pvariable(action_id, template_arg, paren)
335
334
 
336
335
 
337
336
  @automation.register_action(
@@ -342,8 +341,7 @@ async def display_action_to_code(config, action_id, template_arg, args):
342
341
  )
343
342
  async def beeper_action_to_code(config, action_id, template_arg, args):
344
343
  paren = await cg.get_variable(config[CONF_ID])
345
- var = cg.new_Pvariable(action_id, template_arg, paren)
346
- return var
344
+ return cg.new_Pvariable(action_id, template_arg, paren)
347
345
 
348
346
 
349
347
  # Start self cleaning or steri-cleaning action action
@@ -359,8 +357,7 @@ async def beeper_action_to_code(config, action_id, template_arg, args):
359
357
  )
360
358
  async def start_cleaning_to_code(config, action_id, template_arg, args):
361
359
  paren = await cg.get_variable(config[CONF_ID])
362
- var = cg.new_Pvariable(action_id, template_arg, paren)
363
- return var
360
+ return cg.new_Pvariable(action_id, template_arg, paren)
364
361
 
365
362
 
366
363
  # Set vertical airflow direction action
@@ -417,8 +414,7 @@ async def haier_set_horizontal_airflow_to_code(config, action_id, template_arg,
417
414
  )
418
415
  async def health_action_to_code(config, action_id, template_arg, args):
419
416
  paren = await cg.get_variable(config[CONF_ID])
420
- var = cg.new_Pvariable(action_id, template_arg, paren)
421
- return var
417
+ return cg.new_Pvariable(action_id, template_arg, paren)
422
418
 
423
419
 
424
420
  @automation.register_action(
@@ -432,8 +428,7 @@ async def health_action_to_code(config, action_id, template_arg, args):
432
428
  )
433
429
  async def power_action_to_code(config, action_id, template_arg, args):
434
430
  paren = await cg.get_variable(config[CONF_ID])
435
- var = cg.new_Pvariable(action_id, template_arg, paren)
436
- return var
431
+ return cg.new_Pvariable(action_id, template_arg, paren)
437
432
 
438
433
 
439
434
  def _final_validate(config):
@@ -242,7 +242,6 @@ haier_protocol::HandlerError HaierClimateBase::timeout_default_handler_(haier_pr
242
242
  }
243
243
 
244
244
  void HaierClimateBase::setup() {
245
- ESP_LOGCONFIG(TAG, "Running setup");
246
245
  // Set timestamp here to give AC time to boot
247
246
  this->last_request_timestamp_ = std::chrono::steady_clock::now();
248
247
  this->set_phase(ProtocolPhases::SENDING_INIT_1);
@@ -10,8 +10,6 @@ static const char *const TAG = "switch.hbridge";
10
10
 
11
11
  float HBridgeSwitch::get_setup_priority() const { return setup_priority::HARDWARE; }
12
12
  void HBridgeSwitch::setup() {
13
- ESP_LOGCONFIG(TAG, "Running setup for '%s'", this->name_.c_str());
14
-
15
13
  optional<bool> initial_state = this->get_initial_state_with_restore_mode();
16
14
 
17
15
  // Like GPIOSwitch does, set the pin state both before and after pin setup()
@@ -13,8 +13,6 @@ static const uint8_t HDC1080_CMD_TEMPERATURE = 0x00;
13
13
  static const uint8_t HDC1080_CMD_HUMIDITY = 0x01;
14
14
 
15
15
  void HDC1080Component::setup() {
16
- ESP_LOGCONFIG(TAG, "Running setup");
17
-
18
16
  const uint8_t data[2] = {
19
17
  0b00000000, // resolution 14bit for both humidity and temperature
20
18
  0b00000000 // reserved
@@ -126,6 +126,6 @@ async def to_code(config):
126
126
  cg.add(var.set_max_temperature(config[CONF_MAX_TEMPERATURE]))
127
127
  cg.add(var.set_min_temperature(config[CONF_MIN_TEMPERATURE]))
128
128
 
129
- cg.add_library("tonia/HeatpumpIR", "1.0.35")
130
- if CORE.is_libretiny:
129
+ cg.add_library("tonia/HeatpumpIR", "1.0.37")
130
+ if CORE.is_libretiny or CORE.is_esp32:
131
131
  CORE.add_platformio_option("lib_ignore", "IRremoteESP8266")
@@ -11,7 +11,6 @@ static const uint32_t HLW8012_CLOCK_FREQUENCY = 3579000;
11
11
 
12
12
  void HLW8012Component::setup() {
13
13
  float reference_voltage = 0;
14
- ESP_LOGCONFIG(TAG, "Running setup");
15
14
  this->sel_pin_->setup();
16
15
  this->sel_pin_->digital_write(this->current_mode_);
17
16
  this->cf_store_.pulse_counter_setup(this->cf_pin_);
@@ -11,7 +11,6 @@ static const uint8_t PM_2_5_VALUE_INDEX = 6;
11
11
  static const uint8_t PM_10_0_VALUE_INDEX = 7;
12
12
 
13
13
  void HM3301Component::setup() {
14
- ESP_LOGCONFIG(TAG, "Running setup");
15
14
  if (i2c::ERROR_OK != this->write(&SELECT_COMM_CMD, 1)) {
16
15
  error_code_ = ERROR_COMM;
17
16
  this->mark_failed();
@@ -22,7 +22,6 @@ static const uint8_t HMC5883L_REGISTER_IDENTIFICATION_B = 0x0B;
22
22
  static const uint8_t HMC5883L_REGISTER_IDENTIFICATION_C = 0x0C;
23
23
 
24
24
  void HMC5883LComponent::setup() {
25
- ESP_LOGCONFIG(TAG, "Running setup");
26
25
  uint8_t id[3];
27
26
  if (!this->read_byte(HMC5883L_REGISTER_IDENTIFICATION_A, &id[0]) ||
28
27
  !this->read_byte(HMC5883L_REGISTER_IDENTIFICATION_B, &id[1]) ||
@@ -38,3 +38,4 @@ def setup_home_assistant_entity(var, config):
38
38
  cg.add(var.set_entity_id(config[CONF_ENTITY_ID]))
39
39
  if CONF_ATTRIBUTE in config:
40
40
  cg.add(var.set_attribute(config[CONF_ATTRIBUTE]))
41
+ cg.add_define("USE_API_HOMEASSISTANT_STATES")
@@ -23,6 +23,7 @@ CONFIG_SCHEMA = (
23
23
 
24
24
 
25
25
  async def to_code(config):
26
+ cg.add_define("USE_API_HOMEASSISTANT_SERVICES")
26
27
  var = await number.new_number(
27
28
  config,
28
29
  min_value=0,
@@ -83,18 +83,22 @@ void HomeassistantNumber::control(float value) {
83
83
 
84
84
  this->publish_state(value);
85
85
 
86
+ static constexpr auto SERVICE_NAME = StringRef::from_lit("number.set_value");
87
+ static constexpr auto ENTITY_ID_KEY = StringRef::from_lit("entity_id");
88
+ static constexpr auto VALUE_KEY = StringRef::from_lit("value");
89
+
86
90
  api::HomeassistantServiceResponse resp;
87
- resp.service = "number.set_value";
91
+ resp.set_service(SERVICE_NAME);
88
92
 
89
- api::HomeassistantServiceMap entity_id;
90
- entity_id.key = "entity_id";
93
+ resp.data.emplace_back();
94
+ auto &entity_id = resp.data.back();
95
+ entity_id.set_key(ENTITY_ID_KEY);
91
96
  entity_id.value = this->entity_id_;
92
- resp.data.push_back(entity_id);
93
97
 
94
- api::HomeassistantServiceMap entity_value;
95
- entity_value.key = "value";
98
+ resp.data.emplace_back();
99
+ auto &entity_value = resp.data.back();
100
+ entity_value.set_key(VALUE_KEY);
96
101
  entity_value.value = to_string(value);
97
- resp.data.push_back(entity_value);
98
102
 
99
103
  api::global_api_server->send_homeassistant_service_call(resp);
100
104
  }
@@ -37,6 +37,7 @@ CONFIG_SCHEMA = cv.All(
37
37
 
38
38
 
39
39
  async def to_code(config):
40
+ cg.add_define("USE_API_HOMEASSISTANT_SERVICES")
40
41
  var = cg.new_Pvariable(config[CONF_ID])
41
42
  await cg.register_component(var, config)
42
43
  await switch.register_switch(var, config)